From 57add1098d7a6f1a7be74c71621a61a4d3cb6eda Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 30 Sep 2002 08:03:27 +0000 Subject: [PATCH] * 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. --- gpgme/ChangeLog | 9 +++++++++ gpgme/engine-gpgsm.c | 14 ++++++++++++++ gpgme/gpgme.h | 2 +- gpgme/keylist.c | 3 ++- 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog index a2cd246..cf0fd0e 100644 --- a/gpgme/ChangeLog +++ b/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/gpgme/engine-gpgsm.c b/gpgme/engine-gpgsm.c index 0e2a7ce..6d98a9d 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 cf130e4..08261fe 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 044fb75..e7c211e 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) -- 2.26.2