[Pkg-gnupg-commit] [gpgme] 364/412: core: Minor change of the gpgme_op_edit semantics.

Daniel Kahn Gillmor dkg at fifthhorseman.net
Thu Sep 22 21:27:21 UTC 2016


This is an automated email from the git hooks/post-receive script.

dkg pushed a commit to branch master
in repository gpgme.

commit d2b72d3cc19fe2a7d548dac38d55e069e0c9a904
Author: Werner Koch <wk at gnupg.org>
Date:   Thu Sep 15 09:24:29 2016 +0200

    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 <wk at gnupg.org>
---
 doc/gpgme.texi        |  3 ++-
 src/edit.c            | 15 ++++++++-------
 src/engine-gpg.c      |  4 ++++
 src/engine-gpgsm.c    |  8 +++++++-
 src/engine-uiserver.c |  9 ++++++++-
 src/util.h            |  5 +++++
 6 files changed, 34 insertions(+), 10 deletions(-)

diff --git a/doc/gpgme.texi b/doc/gpgme.texi
index ef39d81..a4a0814 100644
--- a/doc/gpgme.texi
+++ b/doc/gpgme.texi
@@ -4312,7 +4312,8 @@ indicates a command rather than a status message, the response to the
 command should be written to @var{fd}.  The @var{handle} is provided
 by the user at start of operation.
 
-The function should return @code{GPG_ERR_NO_ERROR} or an error value.
+The function should return @code{GPG_ERR_FALSE} if it did not handle
+the status code, @code{0} for success, or any other error value.
 @end deftp
 
 @deftypefun gpgme_error_t gpgme_op_edit (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_key_t @var{key}}, @w{gpgme_edit_cb_t @var{fnc}}, @w{void *@var{handle}}, @w{gpgme_data_t @var{out}})
diff --git a/src/edit.c b/src/edit.c
index 72fa458..1be60c4 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -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 9a0dab0..d2741cb 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 5fcfbf1..49cf061 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 318d32e..d855c74 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);
diff --git a/src/util.h b/src/util.h
index a3425f0..a59700f 100644
--- a/src/util.h
+++ b/src/util.h
@@ -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);

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gpgme.git



More information about the Pkg-gnupg-commit mailing list