* export.c: New.
[gnupg.git] / include / util.h
1 /* util.h
2  *      Copyright (C) 1998,1999 Free Software Foundation, Inc.
3  *
4  * This file is part of GNUPG.
5  *
6  * GNUPG is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * GNUPG 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 General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19  */
20 #ifndef GPG_UTIL_H
21 #define GPG_UTIL_H
22
23 #ifdef _GCRYPT_IN_LIBGCRYPT
24   #error This header should not be used internally by libgcrypt
25 #endif
26
27 #include <stdio.h>
28 #include "types.h"
29 #include "errors.h"
30 #include "../jnlib/mischelp.h"
31 #include "../jnlib/stringhelp.h"
32 #include "../jnlib/argparse.h"
33 #include "../jnlib/dotlock.h"
34
35
36 /*-- logger.c --*/
37 void log_set_logfile( const char *name, int fd );
38 FILE *log_stream(void);
39 void gpg_log_print_prefix(const char *text);
40 void log_set_name( const char *name );
41 const char *log_get_name(void);
42 void log_set_pid( int pid );
43 void log_inc_errorcount(void);
44 int  log_get_errorcount( int clear );
45 void gpg_log_hexdump( const char *text, const char *buf, size_t len );
46
47 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 )
48   void gpg_log_bug( const char *fmt, ... )
49                             __attribute__ ((noreturn, format (printf,1,2)));
50   void gpg_log_bug0( const char *, int, const char * ) __attribute__ ((noreturn));
51   void gpg_log_fatal( const char *fmt, ... )
52                             __attribute__ ((noreturn, format (printf,1,2)));
53   void gpg_log_error( const char *fmt, ... ) __attribute__ ((format (printf,1,2)));
54   void gpg_log_info( const char *fmt, ... )  __attribute__ ((format (printf,1,2)));
55   void gpg_log_debug( const char *fmt, ... ) __attribute__ ((format (printf,1,2)));
56   void gpg_log_fatal_f( const char *fname, const char *fmt, ... )
57                             __attribute__ ((noreturn, format (printf,2,3)));
58   void gpg_log_error_f( const char *fname, const char *fmt, ... )
59                             __attribute__ ((format (printf,2,3)));
60   void gpg_log_info_f( const char *fname, const char *fmt, ... )
61                             __attribute__ ((format (printf,2,3)));
62   void gpg_log_debug_f( const char *fname,  const char *fmt, ... )
63                             __attribute__ ((format (printf,2,3)));
64   #define BUG() gpg_log_bug0(  __FILE__ , __LINE__, __FUNCTION__ )
65 #else
66   void gpg_log_bug( const char *fmt, ... );
67   void gpg_log_bug0( const char *, int );
68   void gpg_log_fatal( const char *fmt, ... );
69   void gpg_log_error( const char *fmt, ... );
70   void gpg_log_info( const char *fmt, ... );
71   void gpg_log_debug( const char *fmt, ... );
72   void gpg_log_fatal_f( const char *fname, const char *fmt, ... );
73   void gpg_log_error_f( const char *fname, const char *fmt, ... );
74   void gpg_log_info_f( const char *fname, const char *fmt, ... );
75   void gpg_log_debug_f( const char *fname, const char *fmt, ... );
76   #define BUG() gpg_log_bug0( __FILE__ , __LINE__ )
77 #endif
78
79 #define log_hexdump gpg_log_hexdump
80 #define log_bug     gpg_log_bug
81 #define log_bug0    gpg_log_bug0
82 #define log_fatal   gpg_log_fatal
83 #define log_error   gpg_log_error
84 #define log_info    gpg_log_info
85 #define log_debug   gpg_log_debug
86 #define log_fatal_f gpg_log_fatal_f
87 #define log_error_f gpg_log_error_f
88 #define log_info_f  gpg_log_info_f
89 #define log_debug_f gpg_log_debug_f
90
91
92 /*-- errors.c --*/
93 const char * gpg_errstr( int no );
94
95
96
97 /*-- fileutil.c --*/
98 char * make_basename(const char *filepath);
99 char * make_dirname(const char *filepath);
100 char *make_filename( const char *first_part, ... );
101 int compare_filenames( const char *a, const char *b );
102 const char *print_fname_stdin( const char *s );
103 const char *print_fname_stdout( const char *s );
104
105
106 /*-- miscutil.c --*/
107 u32 make_timestamp(void);
108 u32 scan_isodatestr( const char *string );
109 u32 add_days_to_timestamp( u32 stamp, u16 days );
110 const char *strtimevalue( u32 stamp );
111 const char *strtimestamp( u32 stamp ); /* GMT */
112 const char *asctimestamp( u32 stamp ); /* localized */
113 void print_string( FILE *fp, const byte *p, size_t n, int delim );
114 void  print_utf8_string( FILE *fp, const byte *p, size_t n );
115 char *make_printable_string( const byte *p, size_t n, int delim );
116 int answer_is_yes( const char *s );
117 int answer_is_yes_no_quit( const char *s );
118
119 /*-- strgutil.c --*/
120 void free_strlist( STRLIST sl );
121 #define FREE_STRLIST(a) do { free_strlist((a)); (a) = NULL ; } while(0)
122 STRLIST add_to_strlist( STRLIST *list, const char *string );
123 STRLIST add_to_strlist2( STRLIST *list, const char *string, int is_utf8 );
124 STRLIST append_to_strlist( STRLIST *list, const char *string );
125 STRLIST append_to_strlist2( STRLIST *list, const char *string, int is_utf8 );
126 STRLIST strlist_prev( STRLIST head, STRLIST node );
127 STRLIST strlist_last( STRLIST node );
128 int string_count_chr( const char *string, int c );
129 int set_native_charset( const char *newset );
130 const char* get_native_charset(void);
131 char *native_to_utf8( const char *string );
132 char *utf8_to_native( const char *string, size_t length );
133 int  check_utf8_string( const char *string );
134
135
136 /**** other missing stuff ****/
137 #ifndef HAVE_ATEXIT  /* For SunOS */
138   #define atexit(a)    (on_exit((a),0))
139 #endif
140
141 #ifndef HAVE_RAISE
142   #define raise(a) kill(getpid(), (a))
143 #endif
144
145 /******** some macros ************/
146 #define DIM(v) (sizeof(v)/sizeof((v)[0]))
147 #define DIMof(type,member)   DIM(((type *)0)->member)
148
149 #endif /*GPG_UTIL_H*/