diff options
author | Marcus Brinkmann <[email protected]> | 2003-01-30 22:40:05 +0000 |
---|---|---|
committer | Marcus Brinkmann <[email protected]> | 2003-01-30 22:40:05 +0000 |
commit | 7618b28f1d8ea4bf90d866bf6dba099ca80c7010 (patch) | |
tree | a59d0d2e8e9a9ee220da075bfc8dce128a468238 /gpgme/encrypt.c | |
parent | Fix comment indentation. (diff) | |
download | gpgme-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.c | 53 |
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; } |