aboutsummaryrefslogtreecommitdiffstats
path: root/gpgme/encrypt.c
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2003-01-30 22:40:05 +0000
committerMarcus Brinkmann <[email protected]>2003-01-30 22:40:05 +0000
commit7618b28f1d8ea4bf90d866bf6dba099ca80c7010 (patch)
treea59d0d2e8e9a9ee220da075bfc8dce128a468238 /gpgme/encrypt.c
parentFix comment indentation. (diff)
downloadgpgme-7618b28f1d8ea4bf90d866bf6dba099ca80c7010.tar.gz
gpgme-7618b28f1d8ea4bf90d866bf6dba099ca80c7010.zip
2003-01-30 Marcus Brinkmann <[email protected]>
* engine-gpgsm.c (status_handler): Do not close status fd at end of function. * ops.h (_gpgme_op_data_lookup): Add prototype. * op-support.c: Include <stdlib.h>. (_gpgme_op_data_lookup): New function. * decrypt.c (_gpgme_release_decrypt_result): Function removed. (struct decrypt_result_s): Rename to ... (struct decrypt_resul): ... this. (DecryptResult): New type. (_gpgme_decrypt_status_handler): Don't use test_and_allocate_result, but use _gpgme_op_data_lookup to retrieve result data object. * sign.c (_gpgme_release_sign_result): Function removed. (release_sign_result): New function. (struct sign_result_s): Rename to ... (struct sign_result): ... this. (SignResult): New type. (_gpgme_sign_status_handler): Don't use test_and_allocate_result, but use _gpgme_op_data_lookup to retrieve result data object. * encrypt.c (struct encrypt_result_s): Rename to ... (struct encrypt_result): ... this. (_gpgme_release_encrypt_result): Function removed. (release_encrypt_result): New function. (_gpgme_encrypt_status_handler): Don't use test_and_allocate_result, but use _gpgme_op_data_lookup to retrieve result data object. * verify.c (struct verify_result_s): Rename to ... (struct verify_result): ... this. Remove member next. (VerifyResult): New type. (_gpgme_release_verify_result): Function removed. (release_verify_result): New function. (finish_sig): Change first argument to type VerifyResult. Diddle the type of the op_data structure. (add_notation): Change first argument to type VerifyResult. (_gpgme_verify_status_handler): Don't use test_and_allocate_result, but use _gpgme_op_data_lookup to retrieve result data object. * passphrase.c (struct passphrase_result_s): Rename to ... (struct passphrase_result): ... this. Remove member next. (PassphraseResult): New type. (_gpgme_release_passphrase_result): Function removed. (release_passphrase_result): New function. (_gpgme_passphrase_status_handler): Don't use test_and_allocate_result, but use _gpgme_op_data_lookup to retrieve result data object. (_gpgme_passphrase_command_handler): Likewise. * keylist.c (struct keylist_result_s): Rename to ... (struct keylist_result): ... this. Remove member next. (KeylistResult): New type. (_gpgme_release_keylist_result): Function removed. (release_keylist_result): New function. (keylist_status_handler): Don't use test_and_allocate_result, but use _gpgme_op_data_lookup to retrieve result data object. * edit.c (struct edit_result_s): Rename to ... (struct edit_result): ... this. Remove member next. (EditResult): New type. (_gpgme_release_edit_result): Function removed. (release_edit_result): New function. (edit_status_handler): Don't use test_and_allocate_result, but use _gpgme_op_data_lookup to retrieve result data object. (command_handler): Likewise. * types.h (DecryptResult, SignResult, EncryptResult, PassphraseResult, ImportResult, DeleteResult, GenKeyResult, KeylistResult, EditResult): Types removed. * ops.h: Don't include "types.h", but "gpgme.h" and "context.h". (test_and_allocate_result): Remove macro. (_gpgme_release_decrypt_result): Remove prototype. (_gpgme_decrypt_result): Remove prototype. (_gpgme_release_sign_result): Remove prototype. (_gpgme_release_encrypt_result): Remove prototype. (_gpgme_release_passphrase_result): Remove prototype. (_gpgme_release_import_result): Remove prototype. (_gpgme_release_delete_result): Remove prototype. (_gpgme_release_genkey_result): Remove prototype. (_gpgme_release_keylist_result): Remove prototype. (_gpgme_release_edit_result): Remove prototype. (_gpgme_release_verify_result): Remove prototype. * gpgme.c (_gpgme_release_result): Rewritten. * context.h (enum ctx_op_data_type): New enum. (struct ctx_op_data): New structure. (struct gpgme_context_s): Replace the member result with a member op_data. (fail_on_pending_request): Remove macro. * op-support.c (_gpgme_op_reset): Expand macro fail_on_pending_request. * util.h: Don't include "types.h" or "debug.h", but include "gpgme.h".
Diffstat (limited to '')
-rw-r--r--gpgme/encrypt.c53
1 files changed, 34 insertions, 19 deletions
diff --git a/gpgme/encrypt.c b/gpgme/encrypt.c
index 3b36d76d..5f95151c 100644
--- a/gpgme/encrypt.c
+++ b/gpgme/encrypt.c
@@ -38,22 +38,23 @@
return; /* oops */ \
} while (0)
-struct encrypt_result_s
+struct encrypt_result
{
int no_valid_recipients;
int invalid_recipients;
GpgmeData xmlinfo;
};
+typedef struct encrypt_result *EncryptResult;
-void
-_gpgme_release_encrypt_result (EncryptResult result)
+static void
+release_encrypt_result (void *hook)
{
- if (!result)
- return;
+ EncryptResult result = (EncryptResult) hook;
+
gpgme_data_release (result->xmlinfo);
- free (result);
}
+
/* Parse the args and save the information in an XML structure. With
args of NULL the xml structure is closed. */
static void
@@ -100,36 +101,50 @@ append_xml_encinfo (GpgmeData *rdh, char *args)
GpgmeError
_gpgme_encrypt_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args)
{
- test_and_allocate_result (ctx, encrypt);
+ GpgmeError err = 0;
+ EncryptResult result;
switch (code)
{
case GPGME_STATUS_EOF:
- if (ctx->result.encrypt->xmlinfo)
+ err = _gpgme_op_data_lookup (ctx, OPDATA_ENCRYPT, (void **) &result,
+ -1, NULL);
+ if (!err)
{
- append_xml_encinfo (&ctx->result.encrypt->xmlinfo, NULL);
- _gpgme_set_op_info (ctx, ctx->result.encrypt->xmlinfo);
- ctx->result.encrypt->xmlinfo = NULL;
+ if (result && result->xmlinfo)
+ {
+ append_xml_encinfo (&result->xmlinfo, NULL);
+ _gpgme_set_op_info (ctx, result->xmlinfo);
+ result->xmlinfo = NULL;
+ }
+ if (result && result->no_valid_recipients)
+ return GPGME_No_Recipients;
+ if (result && result->invalid_recipients)
+ return GPGME_Invalid_Recipients;
}
- if (ctx->result.encrypt->no_valid_recipients)
- return GPGME_No_Recipients;
- else if (ctx->result.encrypt->invalid_recipients)
- return GPGME_Invalid_Recipients;
break;
case GPGME_STATUS_INV_RECP:
- ctx->result.encrypt->invalid_recipients++;
- append_xml_encinfo (&ctx->result.encrypt->xmlinfo, args);
+ err = _gpgme_op_data_lookup (ctx, OPDATA_ENCRYPT, (void **) &result,
+ sizeof (*result), release_encrypt_result);
+ if (!err)
+ {
+ result->invalid_recipients++;
+ append_xml_encinfo (&result->xmlinfo, args);
+ }
break;
case GPGME_STATUS_NO_RECP:
- ctx->result.encrypt->no_valid_recipients = 1;
+ err = _gpgme_op_data_lookup (ctx, OPDATA_ENCRYPT, (void **) &result,
+ sizeof (*result), release_encrypt_result);
+ if (!err)
+ result->no_valid_recipients = 1;
break;
default:
break;
}
- return 0;
+ return err;
}