common: Add a global variable to for the default error source.
[gnupg.git] / common / util.h
index 7c58b15..5ea7b81 100644 (file)
@@ -1,20 +1,31 @@
 /* util.h - Utility functions for GnuPG
  * Copyright (C) 2001, 2002, 2003, 2004, 2009 Free Software Foundation, Inc.
  *
- * This file is part of GnuPG.
+ * This file is part of JNLIB, which is a subsystem of GnuPG.
  *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
+ * JNLIB is free software; you can redistribute it and/or modify it
+ * under the terms of either
  *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ *   - the GNU Lesser General Public License as published by the Free
+ *     Software Foundation; either version 3 of the License, or (at
+ *     your option) any later version.
  *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * or
+ *
+ *   - the GNU General Public License as published by the Free
+ *     Software Foundation; either version 2 of the License, or (at
+ *     your option) any later version.
+ *
+ * or both in parallel, as here.
+ *
+ * JNLIB is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copies of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, see <http://www.gnu.org/licenses/>.
  */
 
 #ifndef GNUPG_COMMON_UTIL_H
 #include <errno.h>  /* We need errno.  */
 #include <gpg-error.h> /* We need gpg_error_t. */
 /* Add error codes available only in newer versions of libgpg-error.  */
-#ifndef GPG_ERR_MISSING_KEY
-#define GPG_ERR_MISSING_KEY 181
-#endif
-#ifndef GPG_ERR_LIMIT_REACHED
-#define GPG_ERR_LIMIT_REACHED 183
+#ifndef GPG_ERR_NO_KEYSERVER
+#define GPG_ERR_NO_KEYSERVER 186
 #endif
-#ifndef GPG_ERR_NOT_INITIALIZED
-#define GPG_ERR_NOT_INITIALIZED 184
+#ifndef GPG_ERR_INV_CURVE
+#define GPG_ERR_INV_CURVE 187
 #endif
-#ifndef GPG_ERR_MISSING_ISSUER_CERT
-#define GPG_ERR_MISSING_ISSUER_CERT 185
-#endif
-#ifndef GPG_ERR_FULLY_CANCELED
-#define GPG_ERR_FULLY_CANCELED 198
+#ifndef GPG_ERR_UNKNOWN_CURVE
+#define GPG_ERR_UNKNOWN_CURVE 188
 #endif
 
 
@@ -58,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
 
 /* Due to a bug in mingw32's snprintf related to the 'l' modifier and
    for increased portability we use our snprintf on all systems. */
+#undef snprintf
 #define snprintf estream_snprintf
 
 
 /* GCC attributes.  */
-#if __GNUC__ >= 4 
+#if __GNUC__ >= 4
 # define GNUPG_GCC_A_SENTINEL(a) __attribute__ ((sentinel(a)))
 #else
-# define GNUPG_GCC_A_SENTINEL(a) 
+# define GNUPG_GCC_A_SENTINEL(a)
 #endif
 
 
@@ -107,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.  */
@@ -129,14 +140,14 @@ int answer_is_yes_no_quit (const char *s);
 int answer_is_okay_cancel (const char *s, int def_answer);
 
 /*-- xreadline.c --*/
-ssize_t read_line (FILE *fp, 
+ssize_t read_line (FILE *fp,
                    char **addr_of_buffer, size_t *length_of_buffer,
                    size_t *max_length);
 
 
 /*-- b64enc.c and b64dec.c --*/
-struct b64state 
-{ 
+struct b64state
+{
   unsigned int flags;
   int idx;
   int quad_count;
@@ -147,6 +158,7 @@ struct b64state
   u32 crc;
   int stop_seen:1;
   int invalid_encoding:1;
+  gpg_error_t lasterr;
 };
 
 gpg_error_t b64enc_start (struct b64state *state, FILE *fp, const char *title);
@@ -180,9 +192,9 @@ unsigned char *make_canon_sexp_from_rsa_pk (const void *m, size_t mlen,
                                             size_t *r_len);
 gpg_error_t get_rsa_pk_from_canon_sexp (const unsigned char *keydata,
                                         size_t keydatalen,
-                                        unsigned char const **r_n, 
+                                        unsigned char const **r_n,
                                         size_t *r_nlen,
-                                        unsigned char const **r_e, 
+                                        unsigned char const **r_e,
                                         size_t *r_elen);
 gpg_error_t get_pk_algo_from_canon_sexp (const unsigned char *keydata,
                                          size_t keydatalen,
@@ -205,6 +217,11 @@ char *percent_unescape (const char *string, int nulrepl);
 size_t percent_plus_unescape_inplace (char *string, int nulrepl);
 size_t percent_unescape_inplace (char *string, int nulrepl);
 
+/*-- openpgp-oid.c --*/
+gpg_error_t openpgp_oid_from_str (const char *string, gcry_mpi_t *r_mpi);
+char *openpgp_oid_to_str (gcry_mpi_t a);
+
+
 
 /*-- homedir.c --*/
 const char *standard_homedir (void);
@@ -222,7 +239,7 @@ const char *dirmngr_socket_name (void);
    gpgconf. */
 #define GNUPG_MODULE_NAME_AGENT        1
 #define GNUPG_MODULE_NAME_PINENTRY     2
-#define GNUPG_MODULE_NAME_SCDAEMON     3 
+#define GNUPG_MODULE_NAME_SCDAEMON     3
 #define GNUPG_MODULE_NAME_DIRMNGR      4
 #define GNUPG_MODULE_NAME_PROTECT_TOOL 5
 #define GNUPG_MODULE_NAME_CHECK_PATTERN 6
@@ -277,7 +294,7 @@ int gnupg_compare_version (const char *a, const char *b);
 #ifndef HAVE_TTYNAME
 /* Systems without ttyname (W32) will merely return NULL. */
 static inline char *
-ttyname (int fd) 
+ttyname (int fd)
 {
   (void)fd;
   return NULL;