diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog index d7444889..8d565549 100644 --- a/gpgme/ChangeLog +++ b/gpgme/ChangeLog @@ -166,6 +166,14 @@ * engine-gpgsm.c (_gpgme_gpgsm_add_io_cb): Call IO_CBS->add with new argument, fix up error handling. +2002-07-03 Werner Koch + + * encrypt.c (status_handler_finish): New. + (_gpgme_encrypt_status_handler): Moved some code out to the new + function and call this function also in case we get into the + status handler with an error which might happen due to a kludge in + engine-gpgsm.c + 2002-06-28 Marcus Brinkmann * keylist.c (gpgme_op_keylist_ext_start): Always use our own FD diff --git a/gpgme/encrypt.c b/gpgme/encrypt.c index 57ec9786..df7ef90e 100644 --- a/gpgme/encrypt.c +++ b/gpgme/encrypt.c @@ -99,26 +99,38 @@ append_xml_encinfo (GpgmeData *rdh, char *args) } +static void +status_handler_finish (GpgmeCtx ctx) +{ + if (ctx->result.encrypt->xmlinfo) + { + append_xml_encinfo (&ctx->result.encrypt->xmlinfo, NULL); + _gpgme_set_op_info (ctx, ctx->result.encrypt->xmlinfo); + ctx->result.encrypt->xmlinfo = NULL; + } + if (ctx->error) + ; /* already set by kludge in engine-gpgsm */ + else if (ctx->result.encrypt->no_valid_recipients) + ctx->error = mk_error (No_Recipients); + else if (ctx->result.encrypt->invalid_recipients) + ctx->error = mk_error (Invalid_Recipients); +} + void _gpgme_encrypt_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args) { if (ctx->error) - return; + { + if (ctx->result.encrypt) /* check that we have allocated it. */ + status_handler_finish (ctx); + return; + } test_and_allocate_result (ctx, encrypt); switch (code) { - case GPGME_STATUS_EOF: - if (ctx->result.encrypt->xmlinfo) - { - append_xml_encinfo (&ctx->result.encrypt->xmlinfo, NULL); - _gpgme_set_op_info (ctx, ctx->result.encrypt->xmlinfo); - ctx->result.encrypt->xmlinfo = NULL; - } - if (ctx->result.encrypt->no_valid_recipients) - ctx->error = mk_error (No_Recipients); - else if (ctx->result.encrypt->invalid_recipients) - ctx->error = mk_error (Invalid_Recipients); + case STATUS_EOF: + status_handler_finish (ctx); break; case GPGME_STATUS_INV_RECP: