aboutsummaryrefslogtreecommitdiffstats
path: root/src/delete.c
diff options
context:
space:
mode:
authorDaiki Ueno <[email protected]>2015-11-09 04:13:50 +0000
committerWerner Koch <[email protected]>2015-12-04 15:35:37 +0000
commit67d7f7a9383763b01daf877c846bf3e32f647fa5 (patch)
treeeabf8193be3a7d840eb862ff1a79a83bf670b615 /src/delete.c
parentdoc: Fix minor errors (diff)
downloadgpgme-67d7f7a9383763b01daf877c846bf3e32f647fa5.tar.gz
gpgme-67d7f7a9383763b01daf877c846bf3e32f647fa5.zip
Return on user cancellation of delete operation
* 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.
Diffstat (limited to 'src/delete.c')
-rw-r--r--src/delete.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/delete.c b/src/delete.c
index 37e54f89..d20a5bf6 100644
--- a/src/delete.c
+++ b/src/delete.c
@@ -68,6 +68,38 @@ delete_status_handler (void *priv, gpgme_status_code_t code, char *args)
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;
}