diff options
author | Werner Koch <[email protected]> | 2016-09-15 07:24:29 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2016-09-15 07:24:29 +0000 |
commit | d2b72d3cc19fe2a7d548dac38d55e069e0c9a904 (patch) | |
tree | 9287ba936a5f8d80a61503d23bc5e4709645bb14 /src | |
parent | core: New function gpgme_op_tofu_policy (diff) | |
download | gpgme-d2b72d3cc19fe2a7d548dac38d55e069e0c9a904.tar.gz gpgme-d2b72d3cc19fe2a7d548dac38d55e069e0c9a904.zip |
core: Minor change of the gpgme_op_edit semantics.
* src/edit.c (command_handler): Handle special error code.
* src/engine-gpg.c (read_status): Ditto.
* src/engine-gpgsm.c (status_handler): Ditto.
* src/engine-uiserver.c (status_handler): Ditto.
* src/util.h (GPG_ERR_FALSE): Define for older libgpg-error versions.
--
An edit callback may now simply return GPG_ERR_FALSE to indicate that
it did not handled the status code. GPGME will the do the appropriate
action, which is to send an empty line.
Note that it is highly unlikely that GPG_ERR_FALSE has ever been used
by an application as return value from an edit interactor.
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to '')
-rw-r--r-- | src/edit.c | 15 | ||||
-rw-r--r-- | src/engine-gpg.c | 4 | ||||
-rw-r--r-- | src/engine-gpgsm.c | 8 | ||||
-rw-r--r-- | src/engine-uiserver.c | 9 | ||||
-rw-r--r-- | src/util.h | 5 |
5 files changed, 32 insertions, 9 deletions
@@ -77,6 +77,8 @@ command_handler (void *priv, gpgme_status_code_t status, const char *args, if (err) return err; } + else + err = 0; if (!processed) { @@ -88,16 +90,15 @@ command_handler (void *priv, gpgme_status_code_t status, const char *args, if (err) return err; - /* FIXME: We expect the user to handle _all_ status codes. - Later, we may fix the callback interface to allow the user - indicate if it processed the status code or not. */ - *processed_r = 1; - - return (*opd->fnc) (opd->fnc_value, status, args, fd); + err = (*opd->fnc) (opd->fnc_value, status, args, fd); + if (gpg_err_code (err) == GPG_ERR_FALSE) + err = 0; + else + processed = 1; } *processed_r = processed; - return 0; + return err; } diff --git a/src/engine-gpg.c b/src/engine-gpg.c index 9a0dab0a..d2741cb1 100644 --- a/src/engine-gpg.c +++ b/src/engine-gpg.c @@ -1102,6 +1102,8 @@ read_status (engine_gpg_t gpg) char emptystring[1] = {0}; err = gpg->status.fnc (gpg->status.fnc_value, GPGME_STATUS_EOF, emptystring); + if (gpg_err_code (err) == GPG_ERR_FALSE) + err = 0; /* Drop special error code. */ } return err; @@ -1169,6 +1171,8 @@ read_status (engine_gpg_t gpg) { err = gpg->status.fnc (gpg->status.fnc_value, r, rest); + if (gpg_err_code (err) == GPG_ERR_FALSE) + err = 0; /* Drop special error code. */ if (err) return err; } diff --git a/src/engine-gpgsm.c b/src/engine-gpgsm.c index 5fcfbf16..49cf061d 100644 --- a/src/engine-gpgsm.c +++ b/src/engine-gpgsm.c @@ -827,6 +827,8 @@ status_handler (void *opaque, int fd) char emptystring[1] = {0}; err = gpgsm->status.fnc (gpgsm->status.fnc_value, GPGME_STATUS_EOF, emptystring); + if (gpg_err_code (err) == GPG_ERR_FALSE) + err = 0; /* Drop special error code. */ } if (!err && gpgsm->colon.fnc && gpgsm->colon.any) @@ -978,7 +980,11 @@ status_handler (void *opaque, int fd) if (r >= 0) { if (gpgsm->status.fnc) - err = gpgsm->status.fnc (gpgsm->status.fnc_value, r, rest); + { + err = gpgsm->status.fnc (gpgsm->status.fnc_value, r, rest); + if (gpg_err_code (err) == GPG_ERR_FALSE) + err = 0; /* Drop special error code. */ + } } else fprintf (stderr, "[UNKNOWN STATUS]%s %s", line + 2, rest); diff --git a/src/engine-uiserver.c b/src/engine-uiserver.c index 318d32e3..d855c742 100644 --- a/src/engine-uiserver.c +++ b/src/engine-uiserver.c @@ -676,6 +676,8 @@ status_handler (void *opaque, int fd) char emptystring[1] = {0}; err = uiserver->status.fnc (uiserver->status.fnc_value, GPGME_STATUS_EOF, emptystring); + if (gpg_err_code (err) == GPG_ERR_FALSE) + err = 0; /* Drop special error code. */ } if (!err && uiserver->colon.fnc && uiserver->colon.any) @@ -827,7 +829,12 @@ status_handler (void *opaque, int fd) if (r >= 0) { if (uiserver->status.fnc) - err = uiserver->status.fnc (uiserver->status.fnc_value, r, rest); + { + err = uiserver->status.fnc (uiserver->status.fnc_value, + r, rest); + if (gpg_err_code (err) == GPG_ERR_FALSE) + err = 0; /* Drop special error code. */ + } } else fprintf (stderr, "[UNKNOWN STATUS]%s %s", line + 2, rest); @@ -45,6 +45,11 @@ #define DIM(v) (sizeof(v)/sizeof((v)[0])) +#if GPG_ERROR_VERSION_NUMBER < 0x011500 /* 1.21 */ +# define GPG_ERR_FALSE 256 +#endif + + /*-- {posix,w32}-util.c --*/ int _gpgme_get_conf_int (const char *key, int *value); |