aboutsummaryrefslogtreecommitdiffstats
path: root/gpgme/encrypt-sign.c
diff options
context:
space:
mode:
Diffstat (limited to 'gpgme/encrypt-sign.c')
-rw-r--r--gpgme/encrypt-sign.c48
1 files changed, 18 insertions, 30 deletions
diff --git a/gpgme/encrypt-sign.c b/gpgme/encrypt-sign.c
index 2ed1b1c6..68ab115c 100644
--- a/gpgme/encrypt-sign.c
+++ b/gpgme/encrypt-sign.c
@@ -33,12 +33,10 @@
static GpgmeError
-encrypt_sign_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args)
+encrypt_sign_status_handler (void *priv, GpgmeStatusCode code, char *args)
{
- GpgmeError err = _gpgme_encrypt_status_handler (ctx, code, args);
- if (err)
- return err;
- return _gpgme_sign_status_handler (ctx, code, args);
+ return _gpgme_encrypt_status_handler (priv, code, args)
+ || _gpgme_sign_status_handler (priv, code, args);
}
@@ -47,41 +45,31 @@ _gpgme_op_encrypt_sign_start (GpgmeCtx ctx, int synchronous,
GpgmeRecipients recp,
GpgmeData plain, GpgmeData cipher)
{
- GpgmeError err = 0;
+ GpgmeError err;
err = _gpgme_op_reset (ctx, synchronous);
if (err)
- goto leave;
-
- err = _gpgme_passphrase_start (ctx);
- if (err)
- goto leave;
-
- _gpgme_engine_set_status_handler (ctx->engine,
- encrypt_sign_status_handler, ctx);
+ return err;
- /* Check the supplied data */
if (!plain)
- {
- err = GPGME_No_Data;
- goto leave;
- }
+ return GPGME_No_Data;
if (!cipher)
+ return GPGME_Invalid_Value;
+
+ if (ctx->passphrase_cb)
{
- err = GPGME_Invalid_Value;
- goto leave;
+ err = _gpgme_engine_set_command_handler (ctx->engine,
+ _gpgme_passphrase_command_handler,
+ ctx, NULL);
+ if (err)
+ return err;
}
- err = _gpgme_engine_op_encrypt_sign (ctx->engine, recp, plain, cipher,
- ctx->use_armor, ctx /* FIXME */);
+ _gpgme_engine_set_status_handler (ctx->engine,
+ encrypt_sign_status_handler, ctx);
- leave:
- if (err)
- {
- _gpgme_engine_release (ctx->engine);
- ctx->engine = NULL;
- }
- return err;
+ return _gpgme_engine_op_encrypt_sign (ctx->engine, recp, plain, cipher,
+ ctx->use_armor, ctx /* FIXME */);
}
GpgmeError