Return on user cancellation of delete operation
authorDaiki Ueno <ueno@gnu.org>
Mon, 9 Nov 2015 04:13:50 +0000 (13:13 +0900)
committerWerner Koch <wk@gnupg.org>
Fri, 4 Dec 2015 15:35:37 +0000 (16:35 +0100)
* src/delete.c (delete_status_handler): Return on ERROR status, if the
error location is set to "delete_key.secret" and the code is either
CANCELED or FULLY_CANCELED, which indicates a situation that the user
selected "No" on the confirmation dialog.

src/delete.c

index 37e54f8..d20a5bf 100644 (file)
@@ -68,6 +68,38 @@ delete_status_handler (void *priv, gpgme_status_code_t code, char *args)
          return gpg_error (GPG_ERR_GENERAL);
        }
     }
          return gpg_error (GPG_ERR_GENERAL);
        }
     }
+  else if (code == GPGME_STATUS_ERROR)
+    {
+      /* Some error stati are informational, so we don't return an
+         error code if we are not ready to process this status.  */
+      gpgme_error_t err;
+      char *where = strchr (args, ' ');
+      char *which;
+
+      if (where)
+       {
+         *where = '\0';
+         which = where + 1;
+
+         where = strchr (which, ' ');
+         if (where)
+           *where = '\0';
+
+         where = args;
+       }
+      else
+       return trace_gpg_error (GPG_ERR_INV_ENGINE);
+
+      err = atoi (which);
+
+      if (!strcmp (where, "delete_key.secret")
+         && (gpg_err_code (err) == GPG_ERR_CANCELED
+             || gpg_err_code (err) == GPG_ERR_FULLY_CANCELED))
+       {
+         /* This indicates a user cancellation on the confirmation dialog.  */
+         return gpg_error (gpg_err_code (err));
+       }
+    }
   return 0;
 }
 
   return 0;
 }