diff options
| -rw-r--r-- | gpgme/ChangeLog | 9 | ||||
| -rw-r--r-- | gpgme/engine-gpgsm.c | 14 | ||||
| -rw-r--r-- | gpgme/gpgme.h | 2 | ||||
| -rw-r--r-- | gpgme/keylist.c | 3 | 
4 files changed, 26 insertions, 2 deletions
| diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog index a2cd2469..cf0fd0e9 100644 --- a/gpgme/ChangeLog +++ b/gpgme/ChangeLog @@ -1,3 +1,12 @@ +2002-09-30  Werner Koch  <[email protected]> + +	* keylist.c (keylist_colon_handler): Take care when printing a +	NULL with the DEBUG. + +	* engine-gpgsm.c (struct gpgsm_object_s): New member ANY. +	(gpgsm_status_handler): Run the colon function to indicate. +	(_gpgme_gpgsm_set_colon_line_handler): Better reset ANY here. +  2002-09-28  Marcus Brinkmann  <[email protected]>  	* conversion.c (_gpgme_hextobyte): Prevent superfluous diff --git a/gpgme/engine-gpgsm.c b/gpgme/engine-gpgsm.c index 0e2a7ce4..6d98a9d5 100644 --- a/gpgme/engine-gpgsm.c +++ b/gpgme/engine-gpgsm.c @@ -102,6 +102,7 @@ struct gpgsm_object_s        int linesize;        int linelen;      } attic; +    int any; /* any data line seen */    } colon;     struct GpgmeIOCbs io_cbs; @@ -326,6 +327,7 @@ _gpgme_gpgsm_new (GpgsmObject *r_gpgsm)    gpgsm->colon.attic.line = 0;    gpgsm->colon.attic.linesize = 0;    gpgsm->colon.attic.linelen = 0; +  gpgsm->colon.any = 0;    gpgsm->io_cbs.add = NULL;    gpgsm->io_cbs.add_priv = NULL; @@ -1244,6 +1246,16 @@ gpgsm_status_handler (void *opaque, int fd)  	  if (gpgsm->status.fnc)  	    gpgsm->status.fnc (gpgsm->status.fnc_value, GPGME_STATUS_EOF, ""); +	  if (gpgsm->colon.fnc && gpgsm->colon.any ) +            { +              /* We must tell a colon fucntion about the EOF. We do +                 this only when we have seen any data lines.  Note +                 that this inlined use of colon data lines will +                 eventually be changed into using a regular data +                 channel. */ +              gpgsm->colon.any = 0; +              gpgsm->colon.fnc (gpgsm->colon.fnc_value, NULL); +            }  	  /* XXX: Try our best to terminate the connection.  */  	  if (err) @@ -1306,6 +1318,7 @@ gpgsm_status_handler (void *opaque, int fd)  		  /* Terminate the pending line, pass it to the colon  		     handler and reset it.  */ +                  gpgsm->colon.any = 1;  		  if (*alinelen > 1 && *(dst - 1) == '\r')  		    dst--;  		  *dst = '\0'; @@ -1365,6 +1378,7 @@ _gpgme_gpgsm_set_colon_line_handler (GpgsmObject gpgsm,    gpgsm->colon.fnc = fnc;    gpgsm->colon.fnc_value = fnc_value; +  gpgsm->colon.any = 0;  } diff --git a/gpgme/gpgme.h b/gpgme/gpgme.h index cf130e43..08261fe3 100644 --- a/gpgme/gpgme.h +++ b/gpgme/gpgme.h @@ -43,7 +43,7 @@ extern "C" {     AM_PATH_GPGME macro) check that this header matches the installed     library.  Warning: Do not edit the next line.  configure will do     that for you!  */ -#define GPGME_VERSION "0.3.11" +#define GPGME_VERSION "0.3.12"  /* The opaque data types used by GPGME.  */ diff --git a/gpgme/keylist.c b/gpgme/keylist.c index 044fb757..e7c211e5 100644 --- a/gpgme/keylist.c +++ b/gpgme/keylist.c @@ -255,7 +255,8 @@ keylist_colon_handler (GpgmeCtx ctx, char *line)    const char *trust_info = NULL;    struct subkey_s *sk = NULL; -  DEBUG3 ("keylist_colon_handler ctx=%p, key=%p, line=%s\n", ctx, key, line); +  DEBUG3 ("keylist_colon_handler ctx=%p, key=%p, line=%s\n", ctx, key, +          line? line: "(null)");    if (ctx->error)      return;    if (!line) | 
