From 76e859fb6b176fea6b5c6b96516fa3cd54e155ac Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Wed, 16 Apr 2003 17:02:10 +0000 Subject: The gpg child process exiting does not necessarily mean that we've ready 2003-04-15 Jeffrey Stedfast * camel-gpg-context.c (gpg_verify): The gpg child process exiting does not necessarily mean that we've ready everything that we can from its pipes, so don't use gpg_ctx_op_exited() as a loop-exit condition. If for some reason the gpg child process does exit (due to an error), gpg_ctx_op_step() will eventually fail (as soon as it has finished reading any data in the pipes) and cause the loop to be terminated anyway. This fixes truncation of the gpg --verify stderr output that Evolution displays as the "validity report" (for lack of a better description). (gpg_ctx_op_step): Removed some debugging printf's (gpg_ctx_get_diagnostics): Use a bitfield to decide if we've already flushed the diagnostics stream, much simpler (plus we have plenty of bits to spare so might as well use them). (gpg_ctx_new): Fixed another logic bug which determined whether or not we should convert the gpg output from the locale charset into UTF-8. svn path=/trunk/; revision=20865 --- camel/ChangeLog | 19 +++++++++++++++++++ camel/camel-gpg-context.c | 14 ++++++++------ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/camel/ChangeLog b/camel/ChangeLog index ffda1e546e..78d6f813c4 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,3 +1,22 @@ +2003-04-15 Jeffrey Stedfast + + * camel-gpg-context.c (gpg_verify): The gpg child process exiting + does not necessarily mean that we've ready everything that we can + from its pipes, so don't use gpg_ctx_op_exited() as a loop-exit + condition. If for some reason the gpg child process does exit (due + to an error), gpg_ctx_op_step() will eventually fail (as soon as + it has finished reading any data in the pipes) and cause the loop + to be terminated anyway. This fixes truncation of the gpg --verify + stderr output that Evolution displays as the "validity report" + (for lack of a better description). + (gpg_ctx_op_step): Removed some debugging printf's + (gpg_ctx_get_diagnostics): Use a bitfield to decide if we've + already flushed the diagnostics stream, much simpler (plus we have + plenty of bits to spare so might as well use them). + (gpg_ctx_new): Fixed another logic bug which determined whether or + not we should convert the gpg output from the locale charset into + UTF-8. + 2003-04-10 Jeffrey Stedfast * providers/smtp/camel-smtp-transport.c: Turn off debugging if diff --git a/camel/camel-gpg-context.c b/camel/camel-gpg-context.c index 7919056f9e..0483e8a16b 100644 --- a/camel/camel-gpg-context.c +++ b/camel/camel-gpg-context.c @@ -282,7 +282,9 @@ struct _GpgCtx { unsigned int validsig:1; unsigned int trust:3; - unsigned int padding:18; + unsigned int diagflushed:1; + + unsigned int padding:17; }; static struct _GpgCtx * @@ -334,8 +336,9 @@ gpg_ctx_new (CamelSession *session) stream = camel_stream_mem_new (); gpg->diagbuf = CAMEL_STREAM_MEM (stream)->buffer; + gpg->diagflushed = FALSE; - if ((charset = e_iconv_locale_charset ()) && !strcasecmp (charset, "UTF-8")) { + if ((charset = e_iconv_locale_charset ()) && strcasecmp (charset, "UTF-8") != 0) { CamelMimeFilterCharset *filter; CamelStreamFilter *fstream; @@ -426,7 +429,8 @@ gpg_ctx_set_ostream (struct _GpgCtx *gpg, CamelStream *ostream) static const char * gpg_ctx_get_diagnostics (struct _GpgCtx *gpg) { - if (!gpg->diagbuf->len || gpg->diagbuf->data[gpg->diagbuf->len - 1] != '\0') { + if (!gpg->diagflushed) { + gpg->diagflushed = TRUE; camel_stream_flush (gpg->diagnostics); if (gpg->diagbuf->len == 0) return NULL; @@ -1063,9 +1067,7 @@ gpg_ctx_op_step (struct _GpgCtx *gpg, CamelException *ex) goto exception; if (nread > 0) { - printf ("pre-diag: %.*s\n", nread, buffer); camel_stream_write (gpg->diagnostics, buffer, nread); - printf ("post-diag: %.*s\n", gpg->diagbuf->len, gpg->diagbuf->data); } else { gpg->seen_eof2 = TRUE; } @@ -1390,7 +1392,7 @@ gpg_verify (CamelCipherContext *context, CamelCipherHash hash, goto exception; } - while (!gpg_ctx_op_complete (gpg) && !gpg_ctx_op_exited (gpg)) { + while (!gpg_ctx_op_complete (gpg)) { if (camel_operation_cancel_check (NULL)) { camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL, _("Cancelled.")); -- cgit