2002-08-29 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Thu, 29 Aug 2002 00:30:31 +0000 (00:30 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Thu, 29 Aug 2002 00:30:31 +0000 (00:30 +0000)
* passphrase.c (_gpgme_passphrase_status_handler): Reset
CTX->result.passphrase->no_passphrase if passphrase is given (good
or bad).  Submitted by Jean DIRAISON <jean.diraison@free.fr>.

trunk/gpgme/ChangeLog
trunk/gpgme/passphrase.c
trunk/gpgme/vasprintf.c

index bef845b19a38cfec676eaa480c845f36e73f9f60..e64a7fa1f4defa462f900d27e70a0222aca087c9 100644 (file)
@@ -1,3 +1,9 @@
+2002-08-29  Marcus Brinkmann  <marcus@g10code.de>
+
+       * passphrase.c (_gpgme_passphrase_status_handler): Reset
+       CTX->result.passphrase->no_passphrase if passphrase is given (good
+       or bad).  Submitted by Jean DIRAISON <jean.diraison@free.fr>.
+
 2002-08-28  Marcus Brinkmann  <marcus@g10code.de>
 
        * posix-io.c (_gpgme_io_spawn): Use a double-fork approach.
index 52d75ca6139f672667ed34f5e8658b157ff721db..b3c89b87a6f70d04877218a68c073365c2078527 100644 (file)
@@ -68,10 +68,12 @@ _gpgme_passphrase_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args
 
     case GPGME_STATUS_BAD_PASSPHRASE:
       ctx->result.passphrase->bad_passphrase++;
+      ctx->result.passphrase->no_passphrase = 0;
       break;
 
     case GPGME_STATUS_GOOD_PASSPHRASE:
       ctx->result.passphrase->bad_passphrase = 0;
+      ctx->result.passphrase->no_passphrase = 0;
       break;
 
     case GPGME_STATUS_NEED_PASSPHRASE:
index 30b5e83f14d26c02ef88d0aa18aae2b5f3c7b6dc..6b35e43abb831f1a8b21d1655b4fea6faa8f6902 100644 (file)
@@ -26,6 +26,19 @@ Boston, MA 02111-1307, USA.  */
 #include <stdlib.h>
 #include <stdarg.h>
 
+
+#ifndef va_copy
+#if defined (__GNUC__) && defined (__PPC__) \
+     && (defined (_CALL_SYSV) || defined (_WIN32))
+#define va_copy(d, s) (*(d) = *(s))
+#elif defined (MUST_COPY_VA_BYVAL)
+#define va_copy(d, s) ((d) = (s))
+#else 
+#define va_copy(d, s) memcpy ((d), (s), sizeof (va_list))
+#endif 
+#endif 
+
+
 #ifdef TEST
 int global_total_width;
 #endif
@@ -44,8 +57,7 @@ int_vasprintf (result, format, args)
   int total_width = strlen (format) + 1;
   va_list ap;
 
-  /* FIXME: use va_copy() */
-  memcpy (&ap, args, sizeof (va_list));
+  va_copy (ap, *args);
 
   while (*p != '\0')
     {