From: Werner Koch Date: Mon, 30 Sep 2002 08:03:27 +0000 (+0000) Subject: * keylist.c (keylist_colon_handler): Take care when printing a X-Git-Tag: gpgme-1.2.0@1385~804 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=b24f23d3aee8d9dc69d50c15878e69d21dafdbfe;p=gpgme.git * 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. --- diff --git a/trunk/gpgme/ChangeLog b/trunk/gpgme/ChangeLog index a2cd246..cf0fd0e 100644 --- a/trunk/gpgme/ChangeLog +++ b/trunk/gpgme/ChangeLog @@ -1,3 +1,12 @@ +2002-09-30 Werner Koch + + * 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 * conversion.c (_gpgme_hextobyte): Prevent superfluous diff --git a/trunk/gpgme/engine-gpgsm.c b/trunk/gpgme/engine-gpgsm.c index 0e2a7ce..6d98a9d 100644 --- a/trunk/gpgme/engine-gpgsm.c +++ b/trunk/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/trunk/gpgme/gpgme.h b/trunk/gpgme/gpgme.h index cf130e4..08261fe 100644 --- a/trunk/gpgme/gpgme.h +++ b/trunk/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/trunk/gpgme/keylist.c b/trunk/gpgme/keylist.c index 044fb75..e7c211e 100644 --- a/trunk/gpgme/keylist.c +++ b/trunk/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)