diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/init.c | 14 | ||||
-rw-r--r-- | common/init.h | 12 | ||||
-rw-r--r-- | common/util.h | 7 |
3 files changed, 29 insertions, 4 deletions
diff --git a/common/init.c b/common/init.c index f551416c5..475eaefda 100644 --- a/common/init.c +++ b/common/init.c @@ -37,6 +37,12 @@ #include "util.h" +/* The default error source of the application. This is different + from GPG_ERR_SOURCE_DEFAULT in that it does not depend on the + source file and thus is usable in code shared by applications. */ +gpg_err_source_t default_errsource; + + #ifdef HAVE_W32CE_SYSTEM static void parse_std_file_handles (int *argcp, char ***argvp); static void @@ -74,10 +80,16 @@ writestring_via_estream (int mode, const char *string) required for logging is ready. ARGCP and ARGVP are the addresses of the parameters given to main. This function may modify them. + This function should be called only via the macro + init_common_subsystems. + CAUTION: This might be called while running suid(root). */ void -init_common_subsystems (int *argcp, char ***argvp) +_init_common_subsystems (gpg_err_source_t errsource, int *argcp, char ***argvp) { + /* Store the error source in a gloabl variable. */ + default_errsource = errsource; + /* Try to auto set the character set. */ set_native_charset (NULL); diff --git a/common/init.h b/common/init.h index e8fe499d8..b13c060a6 100644 --- a/common/init.h +++ b/common/init.h @@ -1,5 +1,5 @@ /* init.h - Definitions for init fucntions. - * Copyright (C) 2007 Free Software Foundation, Inc. + * Copyright (C) 2007, 2012 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -20,7 +20,15 @@ #ifndef GNUPG_COMMON_INIT_H #define GNUPG_COMMON_INIT_H -void init_common_subsystems (int *argcp, char ***argvp); +#ifndef GPG_ERR_SOURCE_DEFAULT +# error GPG_ERR_SOURCE_DEFAULT is not defined +#elseif GPG_ERR_SOURCE_DEFAULT == GPG_ERR_SOURCE_UNKNOWN +# error GPG_ERR_SOURCE_DEFAULT has default value +#endif +void _init_common_subsystems (gpg_err_source_t errsource, + int *argcp, char ***argvp); +#define init_common_subsystems(a,b) \ + _init_common_subsystems (GPG_ERR_SOURCE_DEFAULT, (a), (b)) #endif /*GNUPG_COMMON_INIT_H*/ diff --git a/common/util.h b/common/util.h index 9381f29e4..5ea7b819a 100644 --- a/common/util.h +++ b/common/util.h @@ -63,7 +63,6 @@ #include "../common/utf8conv.h" #include "../common/dynload.h" -#include "init.h" #include "gettime.h" /* Redefine asprintf by our estream version which uses our own memory @@ -113,6 +112,12 @@ typedef char **rl_completion_func_t (const char *, int, int); #define xmalloc_clear(a) gcry_xcalloc (1, (a)) #define xmalloc_secure_clear(a) gcry_xcalloc_secure (1, (a)) +/* The default error source of the application. This is different + from GPG_ERR_SOURCE_DEFAULT in that it does not depend on the + source file and thus is usable in code shared by applications. + Defined by init.c. */ +extern gpg_err_source_t default_errsource; + /* Convenience function to return a gpg-error code for memory allocation failures. This function makes sure that an error will be returned even if accidently ERRNO is not set. */ |