* mkerrors: Prettier error formating for gpg-error style codes.
* conversion.c (_gpgme_parse_timestamp): New. Now also handles ISO
8601 timestamps as used by gnupg 1.9.2.
* keylist.c (parse_timestamp): Removed. Replaced calls by
_gpgme_parse_timestamp.
* verify.c (_gpgme_verify_status_handler): Replaced strtoul by
_gpgme_parse_timestamp.
* sign.c (append_xml_siginfo): Ditto.
+2003-11-18 Werner Koch <wk@gnupg.org>
+
+ * configure.ac: Check for timegm.
+
2003-02-18 Marcus Brinkmann <marcus@g10code.de>
Released 0.3.15.
+Noteworthy changes in version 0.3.16
+-------------------------------------------------
+
+ * Compatibility fixes for GnuPG 1.9.
+
Noteworthy changes in version 0.3.15 (2003-02-18)
-------------------------------------------------
+2003-11-18 Werner Koch <wk@gnupg.org>
+
+ * mkerrors: Prettier error formating for gpg-error style codes.
+
2002-05-03 Werner Koch <wk@gnupg.org>
* assuan-pipe-connect.c (assuan_pipe_connect2): New to extend
assuan_strerror (AssuanError err)
{
const char *s;
- static char buf[25];
+ static char buf[50];
switch (err)
{
'
cat <<EOF
- default: sprintf (buf, "ec=%d", err ); s=buf; break;
+ default:
+ {
+ unsigned int source, code;
+
+ source = ((err >> 24) & 0xff);
+ code = (err & 0x00ffffff);
+ if (source) /* Assume this is an libgpg-error. */
+ sprintf (buf, "ec=%u.%u", source, code );
+ else
+ sprintf (buf, "ec=%d", err );
+ s=buf; break;
+ }
}
return s;
dnl
dnl Checks for library functions.
dnl
+AC_CHECK_FUNCS(timegm)
+
AC_REPLACE_FUNCS(stpcpy)
+2003-11-18 Werner Koch <wk@gnupg.org>
+
+ * conversion.c (_gpgme_parse_timestamp): New. Now also handles ISO
+ 8601 timestamps as used by gnupg 1.9.2.
+ * keylist.c (parse_timestamp): Removed. Replaced calls by
+ _gpgme_parse_timestamp.
+ * verify.c (_gpgme_verify_status_handler): Replaced strtoul by
+ _gpgme_parse_timestamp.
+ * sign.c (append_xml_siginfo): Ditto.
+
2003-02-18 Marcus Brinkmann <marcus@g10code.de>
* engine-gpgsm.c (_gpgme_gpgsm_op_sign): Call
/* conversion.c - String conversion helper functions.
* Copyright (C) 2000 Werner Koch (dd9jn)
- * Copyright (C) 2001, 2002 g10 Code GmbH
+ * Copyright (C) 2001, 2002, 2003 g10 Code GmbH
*
* This file is part of GPGME.
*
#include <config.h>
#endif
+#include <stdlib.h>
#include <string.h>
#include <ctype.h>
+#include <time.h>
#include "gpgme.h"
#include "util.h"
+#define atoi_1(p) (*(p) - '0' )
+#define atoi_2(p) ((atoi_1(p) * 10) + atoi_1((p)+1))
+#define atoi_4(p) ((atoi_2(p) * 100) + atoi_2((p)+2))
+
int
_gpgme_hextobyte (const byte *str)
return 0;
}
+
+
+time_t
+_gpgme_parse_timestamp (const char *timestamp)
+{
+ /* Need toskip leading spaces, becuase that is what strtoul does but
+ not our ISO 8601 checking code. */
+ while (*timestamp && *timestamp== ' ')
+ timestamp++;
+ if (!*timestamp)
+ return 0;
+
+ if (strlen (timestamp) >= 15 && timestamp[8] == 'T')
+ {
+ struct tm buf;
+ int year;
+
+ year = atoi_4 (timestamp);
+ if (year < 1900)
+ return (time_t)(-1);
+
+ /* Fixme: We would better use a configure test to see whether
+ mktime can handle dates beyond 2038. */
+ if (sizeof (time_t) <= 4 && year >= 2038)
+ return (time_t)2145914603; /* 2037-12-31 23:23:23 */
+
+ memset (&buf, 0, sizeof buf);
+ buf.tm_year = year - 1900;
+ buf.tm_mon = atoi_2 (timestamp+4) - 1;
+ buf.tm_mday = atoi_2 (timestamp+6);
+ buf.tm_hour = atoi_2 (timestamp+9);
+ buf.tm_min = atoi_2 (timestamp+11);
+ buf.tm_sec = atoi_2 (timestamp+13);
+
+#ifdef HAVE_TIMEGM
+ return timegm (&buf);
+#else
+ {
+ time_t tim;
+
+ putenv ("TZ=UTC");
+ tim = mktime (&buf);
+#ifdef __GNUC__
+#warning fixme: we must somehow reset TZ here. It is not threadsafe anyway.
+#endif
+ return tim;
+ }
+#endif /* !HAVE_TIMEGM */
+ }
+ else
+ return (time_t)strtoul (timestamp, NULL, 10);
+}
+
AM_PATH_GPGME macro) check that this header matches the installed
library. Warning: Do not edit the next line. configure will do
that for you! */
-#define GPGME_VERSION "0.3.15"
+#define GPGME_VERSION "0.3.16-cvs"
/* The opaque data types used by GPGME. */
/* keylist.c - key listing
* Copyright (C) 2000 Werner Koch (dd9jn)
- * Copyright (C) 2001, 2002 g10 Code GmbH
+ * Copyright (C) 2001, 2002, 2003 g10 Code GmbH
*
* This file is part of GPGME.
*
}
-static time_t
-parse_timestamp (char *p)
-{
- if (!*p)
- return 0;
-
- return (time_t)strtoul (p, NULL, 10);
-}
-
-
static void
set_mainkey_trust_info (GpgmeKey key, const char *s)
{
strcpy (key->keys.keyid, p);
break;
case 6: /* timestamp (seconds) */
- key->keys.timestamp = parse_timestamp (p);
+ key->keys.timestamp = _gpgme_parse_timestamp (p);
break;
case 7: /* expiration time (seconds) */
- key->keys.expires_at = parse_timestamp (p);
+ key->keys.expires_at = _gpgme_parse_timestamp (p);
break;
case 8: /* X.509 serial number */
if (rectype == RT_CRT || rectype == RT_CRS)
strcpy (sk->keyid, p);
break;
case 6: /* timestamp (seconds) */
- sk->timestamp = parse_timestamp (p);
+ sk->timestamp = _gpgme_parse_timestamp (p);
break;
case 7: /* expiration time (seconds) */
- sk->expires_at = parse_timestamp (p);
+ sk->expires_at = _gpgme_parse_timestamp (p);
break;
case 8: /* reserved (LID) */
break;
_gpgme_data_append_string (dh, helpbuf);
SKIP_TOKEN_OR_RETURN (args);
- ul = strtoul (args, NULL, 10);
+ ul = _gpgme_parse_timestamp (args);
sprintf (helpbuf, " <created>%lu</created>\n", ul);
_gpgme_data_append_string (dh, helpbuf);
SKIP_TOKEN_OR_RETURN (args);
/*-- conversion.c --*/
GpgmeError _gpgme_decode_c_string (const char *src, char **destp);
int _gpgme_hextobyte (const byte *str);
+time_t _gpgme_parse_timestamp (const char *p);
#endif /* UTIL_H */
while (args[i] && args[i] != ' ')
i++;
/* And get the timestamp. */
- ctx->result.verify->timestamp = strtoul (args+i, &p, 10);
+ ctx->result.verify->timestamp = _gpgme_parse_timestamp (args+i);
if (args[i])
- ctx->result.verify->exptimestamp = strtoul (p, NULL, 10);
+ {
+ /* Skip that timestamp. */
+ while (args[i] && args[i] != ' ')
+ i++;
+ ctx->result.verify->exptimestamp = _gpgme_parse_timestamp (args+i);
+ }
break;
case GPGME_STATUS_BADSIG: