aboutsummaryrefslogtreecommitdiffstats
path: root/gpgme/edit.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/edit.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 'gpgme/edit.c')
-rw-r--r--gpgme/edit.c56
1 files changed, 30 insertions, 26 deletions
diff --git a/gpgme/edit.c b/gpgme/edit.c
index ec898dc9..b6245167 100644
--- a/gpgme/edit.c
+++ b/gpgme/edit.c
@@ -28,47 +28,52 @@
#include "ops.h"
-struct edit_result_s
+struct edit_result
{
GpgmeEditCb fnc;
void *fnc_value;
};
-
-void
-_gpgme_release_edit_result (EditResult result)
-{
- if (!result)
- return;
- free (result);
-}
-
+typedef struct edit_result *EditResult;
static GpgmeError
edit_status_handler (GpgmeCtx ctx, GpgmeStatusCode status, char *args)
{
+ EditResult result;
GpgmeError err = _gpgme_passphrase_status_handler (ctx, status, args);
if (err)
return err;
- return (*ctx->result.edit->fnc) (ctx->result.edit->fnc_value, status,
- args, NULL);
+ err = _gpgme_op_data_lookup (ctx, OPDATA_EDIT, (void **) &result,
+ -1, NULL);
+ if (err)
+ return err;
+ assert (result);
+
+ return (*result->fnc) (result->fnc_value, status, args, NULL);
}
static GpgmeError
command_handler (void *opaque, GpgmeStatusCode status, const char *args,
- const char **result)
+ const char **result_r)
{
+ EditResult result;
GpgmeError err;
GpgmeCtx ctx = opaque;
- err = _gpgme_passphrase_command_handler (ctx, status, args, result);
+ *result_r = NULL;
+ err = _gpgme_passphrase_command_handler (ctx, status, args, result_r);
+ if (err)
+ return err;
+
+ err = _gpgme_op_data_lookup (ctx, OPDATA_EDIT, (void **) &result,
+ -1, NULL);
if (err)
return err;
+ assert (result);
- if (!result)
- err = (*ctx->result.edit->fnc) (ctx->result.edit->fnc_value, status,
- args, result);
+ if (!*result_r)
+ err = (*result->fnc) (result->fnc_value, status, args, result_r);
return err;
}
@@ -80,6 +85,7 @@ _gpgme_op_edit_start (GpgmeCtx ctx, int synchronous,
GpgmeEditCb fnc, void *fnc_value,
GpgmeData out)
{
+ EditResult result;
GpgmeError err = 0;
if (!fnc)
@@ -89,15 +95,13 @@ _gpgme_op_edit_start (GpgmeCtx ctx, int synchronous,
if (err)
goto leave;
- assert (!ctx->result.edit);
- ctx->result.edit = malloc (sizeof *ctx->result.edit);
- if (!ctx->result.edit)
- {
- err = GPGME_Out_Of_Core;
- goto leave;
- }
- ctx->result.edit->fnc = fnc;
- ctx->result.edit->fnc_value = fnc_value;
+ err = _gpgme_op_data_lookup (ctx, OPDATA_EDIT, (void **) &result,
+ sizeof (*result), NULL);
+ if (err)
+ goto leave;
+
+ result->fnc = fnc;
+ result->fnc_value = fnc_value;
/* Check the supplied data. */
if (!out)