aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/init.c14
-rw-r--r--common/init.h12
-rw-r--r--common/util.h7
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. */