doc/
[gpgme.git] / gpgme / util.h
1 /* util.h 
2    Copyright (C) 2000 Werner Koch (dd9jn)
3    Copyright (C) 2001, 2002, 2003 g10 Code GmbH
4
5    This file is part of GPGME.
6  
7    GPGME is free software; you can redistribute it and/or modify it
8    under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11  
12    GPGME is distributed in the hope that it will be useful, but
13    WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    General Public License for more details.
16  
17    You should have received a copy of the GNU General Public License
18    along with GPGME; if not, write to the Free Software Foundation,
19    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
20
21 #ifndef UTIL_H
22 #define UTIL_H
23
24 #include "types.h"
25 #include "debug.h"
26
27 #define DIM(v) (sizeof(v)/sizeof((v)[0]))
28 #define DIMof(type,member)   DIM(((type *)0)->member)
29
30
31 #ifndef HAVE_STPCPY
32 char *stpcpy (char *a, const char *b);
33 #endif
34
35 #define return_if_fail(expr) do {                        \
36     if (!(expr)) {                                       \
37         fprintf (stderr, "%s:%d: assertion `%s' failed", \
38                  __FILE__, __LINE__, #expr );            \
39         return;                                          \
40     } } while (0)
41 #define return_null_if_fail(expr) do {                   \
42     if (!(expr)) {                                       \
43         fprintf (stderr, "%s:%d: assertion `%s' failed", \
44                  __FILE__, __LINE__, #expr );            \
45         return NULL;                                     \
46     } } while (0)
47 #define return_val_if_fail(expr,val) do {                \
48     if (!(expr)) {                                       \
49         fprintf (stderr, "%s:%d: assertion `%s' failed", \
50                  __FILE__, __LINE__, #expr );            \
51         return (val);                                    \
52     } } while (0)
53
54
55
56 /*-- {posix,w32}-util.c --*/
57 const char *_gpgme_get_gpg_path (void);
58 const char *_gpgme_get_gpgsm_path (void);
59
60 /*-- replacement functions in <funcname>.c --*/
61 #ifdef HAVE_CONFIG_H
62 #if !HAVE_VASPRINTF
63 #include <stdarg.h>
64 int vasprintf (char **result, const char *format, va_list args);
65 int asprintf (char **result, const char *format, ...);
66 #endif
67
68 #if !HAVE_FOPENCOOKIE
69 #include <fcntl.h> /* make sure that ssize_t and off_t are defined */
70 typedef struct
71 {
72   ssize_t (*read)(void*,char*,size_t);
73   ssize_t (*write)(void*,const char*,size_t);
74   int (*seek)(void*,off_t*,int);
75   int (*close)(void*);
76 } _IO_cookie_io_functions_t;
77 typedef _IO_cookie_io_functions_t cookie_io_functions_t;
78 FILE *fopencookie (void *cookie, const char *opentype,
79                    cookie_io_functions_t funclist);
80 #endif /*!HAVE_FOPENCOOKIE*/
81 #endif /*HAVE_CONFIG_H*/
82
83
84 /*-- conversion.c --*/
85 /* Convert two hexadecimal digits from STR to the value they
86    represent.  Returns -1 if one of the characters is not a
87    hexadecimal digit.  */
88 int _gpgme_hextobyte (const unsigned char *str);
89
90 /* Decode the C formatted string SRC and store the result in the
91    buffer *DESTP which is LEN bytes long.  If LEN is zero, then a
92    large enough buffer is allocated with malloc and *DESTP is set to
93    the result.  Currently, LEN is only used to specify if allocation
94    is desired or not, the caller is expected to make sure that *DESTP
95    is large enough if LEN is not zero.  */
96 GpgmeError _gpgme_decode_c_string (const char *src, char **destp, int len);
97
98
99 #endif /* UTIL_H */