* engine-gpgsm.c (_gpgme_gpgsm_add_io_cb): Call IO_CBS->add with
new argument, fix up error handling.
+2002-07-03 Werner Koch <wk@gnupg.org>
+
+ * 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 <marcus@g10code.de>
* keylist.c (gpgme_op_keylist_ext_start): Always use our own FD
}
+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: