From eb0faef81dae2cba1f62056fdc4dc2a7d58ac86a Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 6 Feb 2012 20:50:47 +0100 Subject: common: Add a global variable to for the default error source. For the shared code parts it is cumbersome to pass an error sourse variable to each function. Its value is always a constant for a given binary and thus a global variable makes things a lot easier than the former macro stuff. * common/init.c (default_errsource): New global var. (init_common_subsystems): Rename to _init_common_subsystems. Set DEFAULT_ERRSOURCE. * common/init.h: Assert value of GPG_ERR_SOURCE_DEFAULT. (init_common_subsystems): New macro. * common/util.h (default_errsource): Add declaration. * kbx/keybox-defs.h: Add some GPG_ERR_SOURCE_DEFAULT trickery. --- common/init.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'common/init.c') 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); -- cgit v1.2.3