See ChangeLog: Mon Jan 24 13:04:28 CET 2000 Werner Koch
[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 G10_UTIL_H
21 #define G10_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 g10_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 int  log_get_errorcount( int clear );
44 void g10_log_hexdump( const char *text, const char *buf, size_t len );
45
46 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 )
47   void g10_log_bug( const char *fmt, ... )
48                             __attribute__ ((noreturn, format (printf,1,2)));
49   void g10_log_bug0( const char *, int, const char * ) __attribute__ ((noreturn));
50   void g10_log_fatal( const char *fmt, ... )
51                             __attribute__ ((noreturn, format (printf,1,2)));
52   void g10_log_error( const char *fmt, ... ) __attribute__ ((format (printf,1,2)));
53   void g10_log_info( const char *fmt, ... )  __attribute__ ((format (printf,1,2)));
54   void g10_log_debug( const char *fmt, ... ) __attribute__ ((format (printf,1,2)));
55   void g10_log_fatal_f( const char *fname, const char *fmt, ... )
56                             __attribute__ ((noreturn, format (printf,2,3)));
57   void g10_log_error_f( const char *fname, const char *fmt, ... )
58                             __attribute__ ((format (printf,2,3)));
59   void g10_log_info_f( const char *fname, const char *fmt, ... )
60                             __attribute__ ((format (printf,2,3)));
61   void g10_log_debug_f( const char *fname,  const char *fmt, ... )
62                             __attribute__ ((format (printf,2,3)));
63   #define BUG() g10_log_bug0(  __FILE__ , __LINE__, __FUNCTION__ )
64 #else
65   void g10_log_bug( const char *fmt, ... );
66   void g10_log_bug0( const char *, int );
67   void g10_log_fatal( const char *fmt, ... );
68   void g10_log_error( const char *fmt, ... );
69   void g10_log_info( const char *fmt, ... );
70   void g10_log_debug( const char *fmt, ... );
71   void g10_log_fatal_f( const char *fname, const char *fmt, ... );
72   void g10_log_error_f( const char *fname, const char *fmt, ... );
73   void g10_log_info_f( const char *fname, const char *fmt, ... );
74   void g10_log_debug_f( const char *fname, const char *fmt, ... );
75   #define BUG() g10_log_bug0( __FILE__ , __LINE__ )
76 #endif
77
78 #define log_hexdump g10_log_hexdump
79 #define log_bug     g10_log_bug
80 #define log_bug0    g10_log_bug0
81 #define log_fatal   g10_log_fatal
82 #define log_error   g10_log_error
83 #define log_info    g10_log_info
84 #define log_debug   g10_log_debug
85 #define log_fatal_f g10_log_fatal_f
86 #define log_error_f g10_log_error_f
87 #define log_info_f  g10_log_info_f
88 #define log_debug_f g10_log_debug_f
89
90
91 /*-- errors.c --*/
92 const char * g10_errstr( int no );
93
94
95
96 /*-- fileutil.c --*/
97 char * make_basename(const char *filepath);
98 char * make_dirname(const char *filepath);
99 char *make_filename( const char *first_part, ... );
100 int compare_filenames( const char *a, const char *b );
101 const char *print_fname_stdin( const char *s );
102 const char *print_fname_stdout( const char *s );
103
104
105 /*-- miscutil.c --*/
106 u32 make_timestamp(void);
107 u32 scan_isodatestr( const char *string );
108 u32 add_days_to_timestamp( u32 stamp, u16 days );
109 const char *strtimevalue( u32 stamp );
110 const char *strtimestamp( u32 stamp ); /* GMT */
111 const char *asctimestamp( u32 stamp ); /* localized */
112 void print_string( FILE *fp, const byte *p, size_t n, int delim );
113 void  print_utf8_string( FILE *fp, const byte *p, size_t n );
114 char *make_printable_string( const byte *p, size_t n, int delim );
115 int answer_is_yes( const char *s );
116 int answer_is_yes_no_quit( const char *s );
117
118 /*-- strgutil.c --*/
119 void free_strlist( STRLIST sl );
120 #define FREE_STRLIST(a) do { free_strlist((a)); (a) = NULL ; } while(0)
121 STRLIST add_to_strlist( STRLIST *list, const char *string );
122 STRLIST add_to_strlist2( STRLIST *list, const char *string, int is_utf8 );
123 STRLIST append_to_strlist( STRLIST *list, const char *string );
124 STRLIST append_to_strlist2( STRLIST *list, const char *string, int is_utf8 );
125 STRLIST strlist_prev( STRLIST head, STRLIST node );
126 STRLIST strlist_last( STRLIST node );
127 int string_count_chr( const char *string, int c );
128 int set_native_charset( const char *newset );
129 const char* get_native_charset(void);
130 char *native_to_utf8( const char *string );
131 char *utf8_to_native( const char *string, size_t length );
132 int  check_utf8_string( const char *string );
133
134
135 /**** other missing stuff ****/
136 #ifndef HAVE_ATEXIT  /* For SunOS */
137   #define atexit(a)    (on_exit((a),0))
138 #endif
139
140 #ifndef HAVE_RAISE
141   #define raise(a) kill(getpid(), (a))
142 #endif
143
144 /******** some macros ************/
145 #define DIM(v) (sizeof(v)/sizeof((v)[0]))
146 #define DIMof(type,member)   DIM(((type *)0)->member)
147
148 #endif /*G10_UTIL_H*/