w32: Remove all support for WindowsCE
[gpgme.git] / src / util.h
index 9c62f57..cea5e1f 100644 (file)
 #define UTIL_H
 
 #ifdef HAVE_W32_SYSTEM
-# ifdef HAVE_W32CE_SYSTEM
-#  include "w32-ce.h"
-# else
-#  include "winsock2.h"
-#  include "windows.h"
-# endif
+# include "winsock2.h"
+# include "windows.h"
 #endif
 
 /* For pid_t.  */
 \f
 #define DIM(v) (sizeof(v)/sizeof((v)[0]))
 
+#if GPG_ERROR_VERSION_NUMBER < 0x011900 /* 1.25 */
+# define GPG_ERR_ENGINE_TOO_OLD 300
+# define GPG_ERR_TOO_OLD        308
+#endif
+
+#ifndef GPGRT_ATTR_SENTINEL
+# define GPGRT_ATTR_SENTINEL(a)  /* */
+#endif
+
+
 \f
 /*-- {posix,w32}-util.c --*/
 int _gpgme_get_conf_int (const char *key, int *value);
@@ -81,11 +87,12 @@ _gpgme_stpcpy (char *a, const char *b)
 #define stpcpy(a,b) _gpgme_stpcpy ((a), (b))
 #endif /*!HAVE_STPCPY*/
 
-#if !HAVE_VASPRINTF
-#include <stdarg.h>
-int vasprintf (char **result, const char *format, va_list args);
-int asprintf (char **result, const char *format, ...);
-#endif
+
+/* 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 gpgrt_snprintf
+
 
 #if REPLACE_TTYNAME_R
 int _gpgme_ttyname_r (int fd, char *buf, size_t buflen);
@@ -97,6 +104,12 @@ int _gpgme_ttyname_r (int fd, char *buf, size_t buflen);
 
 \f
 /*-- conversion.c --*/
+
+/* Concatenate the string S1 with all the following strings up to a
+   NULL.  Returns a malloced buffer with the new string or NULL on a
+   malloc error or if too many arguments are given.  */
+char *_gpgme_strconcat (const char *s1, ...) GPGRT_ATTR_SENTINEL(0);
+
 /* Convert two hexadecimal digits from STR to the value they
    represent.  Returns -1 if one of the characters is not a
    hexadecimal digit.  */
@@ -134,6 +147,9 @@ int _gpgme_split_fields (char *string, char **array, int arraysize);
  * trailing garbage.  */
 gpgme_error_t _gpgme_strtoul_field (const char *string, unsigned long *result);
 
+/* Convert STRING into an offset value similar to atoi().  */
+gpgme_off_t _gpgme_string_to_off (const char *string);
+
 /* Parse the string TIMESTAMP into a time_t.  The string may either be
    seconds since Epoch or in the ISO 8601 format like
    "20390815T143012".  Returns 0 for an empty string or seconds since
@@ -141,11 +157,35 @@ gpgme_error_t _gpgme_strtoul_field (const char *string, unsigned long *result);
    point to the next non-parsed character in TIMESTRING. */
 time_t _gpgme_parse_timestamp (const char *timestamp, char **endp);
 
-
-gpgme_error_t _gpgme_map_gnupg_error (char *err);
+/* Variant of _gpgme_parse_timestamp to return an unsigned long or 0
+ * on error or missing timestamp.  */
+unsigned long _gpgme_parse_timestamp_ul (const char *timestamp);
 
 int _gpgme_map_pk_algo (int algo, gpgme_protocol_t protocol);
 
+const char *_gpgme_cipher_algo_name (int algo, gpgme_protocol_t protocol);
+const char *_gpgme_cipher_mode_name (int algo, gpgme_protocol_t protocol);
+
+\f
+/*-- b64dec.c --*/
+
+struct b64state
+{
+  int idx;
+  int quad_count;
+  char *title;
+  unsigned char radbuf[4];
+  int stop_seen:1;
+  int invalid_encoding:1;
+  gpg_error_t lasterr;
+};
+
+gpg_error_t _gpgme_b64dec_start (struct b64state *state, const char *title);
+gpg_error_t _gpgme_b64dec_proc (struct b64state *state,
+                                void *buffer, size_t length, size_t *r_nbytes);
+gpg_error_t _gpgme_b64dec_finish (struct b64state *state);
+
+
 \f
 /* Retrieve the environment variable NAME and return a copy of it in a
    malloc()'ed buffer in *VALUE.  If the environment variable is not
@@ -157,15 +197,13 @@ gpgme_error_t _gpgme_getenv (const char *name, char **value);
 /* Convert a status string to a status code.  */
 void _gpgme_status_init (void);
 gpgme_status_code_t _gpgme_parse_status (const char *name);
+const char *_gpgme_status_to_string (gpgme_status_code_t code);
 
 \f
 #ifdef HAVE_W32_SYSTEM
 int _gpgme_mkstemp (int *fd, char **name);
 const char *_gpgme_get_w32spawn_path (void);
 #endif /*HAVE_W32_SYSTEM*/
-#ifdef HAVE_W32CE_SYSTEM
-char *_gpgme_w32ce_get_debug_envvar (void);
-#endif /*HAVE_W32CE_SYSTEM*/
 
 
 \f
@@ -176,4 +214,26 @@ extern struct assuan_malloc_hooks _gpgme_assuan_malloc_hooks;
 int _gpgme_assuan_log_cb (assuan_context_t ctx, void *hook,
                          unsigned int cat, const char *msg);
 
+\f
+
+/* Parse the compliance field.  */
+#define PARSE_COMPLIANCE_FLAGS(flags, result)                          \
+  do {                                                                 \
+    char *comp_p, *comp_endp;                                          \
+    unsigned long comp_ul;                                             \
+                                                                       \
+    for (comp_p = (flags);                                             \
+        comp_p                                                         \
+          && (comp_ul = strtoul (comp_p, &comp_endp, 10))              \
+          && comp_p != comp_endp;                                      \
+        comp_p = comp_endp)                                            \
+      {                                                                        \
+       switch (comp_ul)                                                \
+         {                                                             \
+         case 23: (result)->is_de_vs = 1; break;                       \
+         }                                                             \
+      }                                                                        \
+  } while (0)
+
+
 #endif /* UTIL_H */