diff options
author | Daiki Ueno <[email protected]> | 2015-11-09 04:13:50 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2015-12-04 15:35:37 +0000 |
commit | 67d7f7a9383763b01daf877c846bf3e32f647fa5 (patch) | |
tree | eabf8193be3a7d840eb862ff1a79a83bf670b615 | |
parent | doc: Fix minor errors (diff) | |
download | gpgme-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.
-rw-r--r-- | src/delete.c | 32 |
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; } |