Added translation framework and translated a few strings.
[gpgol.git] / src / util.h
1 /* util.h - Common functions.
2  *      Copyright (C) 2005 g10 Code GmbH
3  *
4  * This file is part of GPGol.
5  * 
6  * GPGol is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  * 
11  * GPGol is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU Lesser General Public License for more details.
15  * 
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19  * 02110-1301, USA.
20  */
21
22 #ifndef UTIL_H
23 #define UTIL_H
24
25 #ifdef __cplusplus
26 extern "C" {
27 #if 0
28 }
29 #endif
30 #endif
31
32 /* To avoid that a compiler optimizes certain memset calls away, these
33    macros may be used instead. */
34 #define wipememory2(_ptr,_set,_len) do { \
35               volatile char *_vptr=(volatile char *)(_ptr); \
36               size_t _vlen=(_len); \
37               while(_vlen) { *_vptr=(_set); _vptr++; _vlen--; } \
38                   } while(0)
39 #define wipememory(_ptr,_len) wipememory2(_ptr,0,_len)
40 #define wipestring(_ptr) do { \
41               volatile char *_vptr=(volatile char *)(_ptr); \
42               while(*_vptr) { *_vptr=0; _vptr++; } \
43                   } while(0)
44
45
46 /* i18n stuff */
47 #include "w32-gettext.h"
48 #define _(a) gettext (a)
49 #define N_(a) gettext_noop (a)
50
51
52 /*-- common.c --*/
53 void* xmalloc (size_t n);
54 void* xcalloc (size_t m, size_t n);
55 char* xstrdup (const char *s);
56 void  xfree (void *p);
57 void out_of_core (void);
58
59 char *wchar_to_utf8 (const wchar_t *string);
60 char *wchar_to_utf8_2 (const wchar_t *string, size_t len);
61 wchar_t *utf8_to_wchar (const char *string);
62 wchar_t *utf8_to_wchar2 (const char *string, size_t len);
63 char *latin1_to_utf8 (const char *string);
64
65 char *trim_trailing_spaces (char *string);
66 char *read_w32_registry_string (const char *root, const char *dir,
67                                 const char *name);
68
69
70 /*-- main.c --*/
71 void log_debug (const char *fmt, ...) __attribute__ ((format (printf,1,2)));
72 void log_error (const char *fmt, ...) __attribute__ ((format (printf,1,2)));
73 void log_vdebug (const char *fmt, va_list a);
74 void log_debug_w32 (int w32err, const char *fmt,
75                     ...) __attribute__ ((format (printf,2,3)));
76 void log_error_w32 (int w32err, const char *fmt,
77                     ...) __attribute__ ((format (printf,2,3)));
78 void log_hexdump (const void *buf, size_t buflen, const char *fmt, 
79                   ...)  __attribute__ ((format (printf,3,4)));
80 const char *log_srcname (const char *s);
81 #define SRCNAME log_srcname (__FILE__)
82      
83 const char *get_log_file (void);
84 void set_log_file (const char *name);
85 void set_default_key (const char *name);
86 void read_options (void);
87 int write_options (void);
88
89
90 /*-- Macros to replace ctype ones to avoid locale problems. --*/
91 #define spacep(p)   (*(p) == ' ' || *(p) == '\t')
92 #define digitp(p)   (*(p) >= '0' && *(p) <= '9')
93 #define hexdigitp(a) (digitp (a)                     \
94                       || (*(a) >= 'A' && *(a) <= 'F')  \
95                       || (*(a) >= 'a' && *(a) <= 'f'))
96   /* Note this isn't identical to a C locale isspace() without \f and
97      \v, but works for the purposes used here. */
98 #define ascii_isspace(a) ((a)==' ' || (a)=='\n' || (a)=='\r' || (a)=='\t')
99
100 /* The atoi macros assume that the buffer has only valid digits. */
101 #define atoi_1(p)   (*(p) - '0' )
102 #define atoi_2(p)   ((atoi_1(p) * 10) + atoi_1((p)+1))
103 #define atoi_4(p)   ((atoi_2(p) * 100) + atoi_2((p)+2))
104 #define xtoi_1(p)   (*(p) <= '9'? (*(p)- '0'): \
105                      *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
106 #define xtoi_2(p)   ((xtoi_1(p) * 16) + xtoi_1((p)+1))
107 #define xtoi_4(p)   ((xtoi_2(p) * 256) + xtoi_2((p)+2))
108
109
110 /*****  Missing functions.  ****/
111
112 #ifndef HAVE_STPCPY
113 static inline char *
114 _gpgol_stpcpy (char *a, const char *b)
115 {
116   while (*b)
117     *a++ = *b++;
118   *a = 0;
119   return a;
120 }
121 #define stpcpy(a,b) _gpgol_stpcpy ((a), (b))
122 #endif /*!HAVE_STPCPY*/
123
124
125
126 #ifdef __cplusplus
127 }
128 #endif
129 #endif /*UTIL_H*/