2004-09-30 Marcus Brinkmann <marcus@g10code.de>
[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 "gpgme.h"
25
26 \f
27 #define DIM(v) (sizeof(v)/sizeof((v)[0]))
28
29 \f
30 /*-- {posix,w32}-util.c --*/
31 const char *_gpgme_get_gpg_path (void);
32 const char *_gpgme_get_gpgsm_path (void);
33
34 \f
35 /*-- replacement functions in <funcname>.c --*/
36 #ifdef HAVE_CONFIG_H
37 #ifndef HAVE_STPCPY
38 char *stpcpy (char *a, const char *b);
39 #endif
40
41 #if !HAVE_VASPRINTF
42 #include <stdarg.h>
43 int vasprintf (char **result, const char *format, va_list args);
44 int asprintf (char **result, const char *format, ...);
45 #endif
46 #endif
47
48 \f
49 /*-- conversion.c --*/
50 /* Convert two hexadecimal digits from STR to the value they
51    represent.  Returns -1 if one of the characters is not a
52    hexadecimal digit.  */
53 int _gpgme_hextobyte (const char *str);
54
55 /* Decode the C formatted string SRC and store the result in the
56    buffer *DESTP which is LEN bytes long.  If LEN is zero, then a
57    large enough buffer is allocated with malloc and *DESTP is set to
58    the result.  Currently, LEN is only used to specify if allocation
59    is desired or not, the caller is expected to make sure that *DESTP
60    is large enough if LEN is not zero.  */
61 gpgme_error_t _gpgme_decode_c_string (const char *src, char **destp,
62                                       size_t len);
63
64 /* Decode the percent escaped string SRC and store the result in the
65    buffer *DESTP which is LEN bytes long.  If LEN is zero, then a
66    large enough buffer is allocated with malloc and *DESTP is set to
67    the result.  Currently, LEN is only used to specify if allocation
68    is desired or not, the caller is expected to make sure that *DESTP
69    is large enough if LEN is not zero.  */
70 gpgme_error_t _gpgme_decode_percent_string (const char *src, char **destp,
71                                             size_t len);
72
73
74 /* Parse the string TIMESTAMP into a time_t.  The string may either be
75    seconds since Epoch or in the ISO 8601 format like
76    "20390815T143012".  Returns 0 for an empty string or seconds since
77    Epoch. Leading spaces are skipped. If ENDP is not NULL, it will
78    point to the next non-parsed character in TIMESTRING. */
79 time_t _gpgme_parse_timestamp (const char *timestamp, char **endp);
80
81
82 gpgme_error_t _gpgme_map_gnupg_error (char *err);
83
84 \f
85 /* Retrieve the environment variable NAME and return a copy of it in a
86    malloc()'ed buffer in *VALUE.  If the environment variable is not
87    set, return NULL in *VALUE.  */
88 gpgme_error_t _gpgme_getenv (const char *name, char **value);
89
90 #endif /* UTIL_H */