Fixed an update conflict.
authorWerner Koch <wk@gnupg.org>
Thu, 1 Aug 2002 10:16:21 +0000 (10:16 +0000)
committerWerner Koch <wk@gnupg.org>
Thu, 1 Aug 2002 10:16:21 +0000 (10:16 +0000)
gpgme/ChangeLog
gpgme/encrypt.c

index d74448893689a89fd843a1e99046976b59508422..8d565549ed7f6c2a3e160c6a60b9952735c5b13e 100644 (file)
        * engine-gpgsm.c (_gpgme_gpgsm_add_io_cb): Call IO_CBS->add with
        new argument, fix up error handling.
 
+2002-07-03  Werner Koch  <wk@gnupg.org>
+
+       * encrypt.c (status_handler_finish): New.
+       (_gpgme_encrypt_status_handler): Moved some code out to the new
+       function and call this function also in case we get into the
+       status handler with an error which might happen due to a kludge in
+       engine-gpgsm.c
+
 2002-06-28  Marcus Brinkmann  <marcus@g10code.de>
 
        * keylist.c (gpgme_op_keylist_ext_start): Always use our own FD
index 57ec97865573ef53463a1fa4d663f239524b6507..df7ef90e3a6cc15ccf047a82b04c609206bb27b4 100644 (file)
@@ -99,26 +99,38 @@ append_xml_encinfo (GpgmeData *rdh, char *args)
 }
 
 
+static void
+status_handler_finish (GpgmeCtx ctx)
+{
+  if (ctx->result.encrypt->xmlinfo)
+    {
+      append_xml_encinfo (&ctx->result.encrypt->xmlinfo, NULL);
+      _gpgme_set_op_info (ctx, ctx->result.encrypt->xmlinfo);
+      ctx->result.encrypt->xmlinfo = NULL;
+    }
+  if (ctx->error)
+    ; /* already set by kludge in engine-gpgsm */
+  else if (ctx->result.encrypt->no_valid_recipients) 
+    ctx->error = mk_error (No_Recipients);
+  else if (ctx->result.encrypt->invalid_recipients) 
+    ctx->error = mk_error (Invalid_Recipients);
+}
+
 void
 _gpgme_encrypt_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args)
 {
   if (ctx->error)
-    return;
+    {
+      if (ctx->result.encrypt) /* check that we have allocated it. */
+        status_handler_finish (ctx);
+      return;
+    }
   test_and_allocate_result (ctx, encrypt);
 
   switch (code)
     {
-    case GPGME_STATUS_EOF:
-      if (ctx->result.encrypt->xmlinfo)
-       {
-         append_xml_encinfo (&ctx->result.encrypt->xmlinfo, NULL);
-         _gpgme_set_op_info (ctx, ctx->result.encrypt->xmlinfo);
-         ctx->result.encrypt->xmlinfo = NULL;
-        }
-      if (ctx->result.encrypt->no_valid_recipients) 
-       ctx->error = mk_error (No_Recipients);
-      else if (ctx->result.encrypt->invalid_recipients) 
-       ctx->error = mk_error (Invalid_Recipients);
+    case STATUS_EOF:
+      status_handler_finish (ctx);
       break;
 
     case GPGME_STATUS_INV_RECP: