2005-08-26 Marcus Brinkmann <marcus@g10code.de>

* engine.h (engine_command_handler_t): Add new argument processed.
	* ops.h (_gpgme_passphrase_command_handler_internal): Rename
	prototype to ...
	(_gpgme_passphrase_command_handler): ... this one.
	* passphrase.c (_gpgme_passphrase_command_handler_internal):
	Rename to ...
	(_gpgme_passphrase_command_handler): ... this one.
	* edit.c (command_handler): Add new argument processed.  Remove
	local variable with the same name.  Always return processed as
	true.
	* rungpg.c (command_handler): Send a newline character if the
	handler did not.
This commit is contained in:
Marcus Brinkmann 2005-08-26 14:53:55 +00:00
parent 82a0c97250
commit 9f952a5a0b
7 changed files with 37 additions and 23 deletions

2
TODO
View File

@ -6,6 +6,8 @@ Hey Emacs, this is -*- outline -*- mode!
** Add notation data to key signatures. ** Add notation data to key signatures.
* ABI's to break: * ABI's to break:
** gpgme_edit_cb_t: Add "processed" return argument
(see edit.c::command_handler).
** I/O and User Data could be made extensible. But this can be done ** I/O and User Data could be made extensible. But this can be done
without breaking the ABI hopefully. without breaking the ABI hopefully.
* All enums that should be enums need to have a maximum value to ensure * All enums that should be enums need to have a maximum value to ensure

View File

@ -1,3 +1,18 @@
2005-08-26 Marcus Brinkmann <marcus@g10code.de>
* engine.h (engine_command_handler_t): Add new argument processed.
* ops.h (_gpgme_passphrase_command_handler_internal): Rename
prototype to ...
(_gpgme_passphrase_command_handler): ... this one.
* passphrase.c (_gpgme_passphrase_command_handler_internal):
Rename to ...
(_gpgme_passphrase_command_handler): ... this one.
* edit.c (command_handler): Add new argument processed. Remove
local variable with the same name. Always return processed as
true.
* rungpg.c (command_handler): Send a newline character if the
handler did not.
2005-08-26 Werner Koch <wk@g10code.com> 2005-08-26 Werner Koch <wk@g10code.com>
* w32-util.c (read_w32_registry_string): Updated from code used by * w32-util.c (read_w32_registry_string): Updated from code used by

View File

@ -63,21 +63,20 @@ edit_status_handler (void *priv, gpgme_status_code_t status, char *args)
static gpgme_error_t static gpgme_error_t
command_handler (void *priv, gpgme_status_code_t status, const char *args, command_handler (void *priv, gpgme_status_code_t status, const char *args,
int fd) int fd, int *processed)
{ {
gpgme_ctx_t ctx = (gpgme_ctx_t) priv; gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
gpgme_error_t err; gpgme_error_t err;
int processed = 0;
if (ctx->passphrase_cb) if (ctx->passphrase_cb)
{ {
err = _gpgme_passphrase_command_handler_internal (ctx, status, args, err = _gpgme_passphrase_command_handler (ctx, status, args,
fd, &processed); fd, processed);
if (err) if (err)
return err; return err;
} }
if (!processed) if (!*processed)
{ {
void *hook; void *hook;
op_data_t opd; op_data_t opd;
@ -87,8 +86,14 @@ command_handler (void *priv, gpgme_status_code_t status, const char *args,
if (err) if (err)
return err; return err;
/* FIXME: We expect the user to handle _all_ status codes.
Later, we may fix the callback interface to allow the user
indicate if it processed the status code or not. */
*processed = 1;
return (*opd->fnc) (opd->fnc_value, status, args, fd); return (*opd->fnc) (opd->fnc_value, status, args, fd);
} }
return 0; return 0;
} }

View File

@ -34,7 +34,7 @@ typedef gpgme_error_t (*engine_colon_line_handler_t) (void *priv, char *line);
typedef gpgme_error_t (*engine_command_handler_t) (void *priv, typedef gpgme_error_t (*engine_command_handler_t) (void *priv,
gpgme_status_code_t code, gpgme_status_code_t code,
const char *keyword, const char *keyword,
int fd); int fd, int *processed);
/* Get a deep copy of the engine info and return it in INFO. */ /* Get a deep copy of the engine info and return it in INFO. */
gpgme_error_t _gpgme_engine_info_copy (gpgme_engine_info_t *r_info); gpgme_error_t _gpgme_engine_info_copy (gpgme_engine_info_t *r_info);

View File

@ -103,9 +103,6 @@ gpgme_error_t _gpgme_passphrase_status_handler (void *priv,
gpgme_status_code_t code, gpgme_status_code_t code,
char *args); char *args);
gpgme_error_t _gpgme_passphrase_command_handler (void *opaque, gpgme_error_t _gpgme_passphrase_command_handler (void *opaque,
gpgme_status_code_t code,
const char *key, int fd);
gpgme_error_t _gpgme_passphrase_command_handler_internal (void *opaque,
gpgme_status_code_t code, gpgme_status_code_t code,
const char *key, int fd, const char *key, int fd,
int *processed); int *processed);

View File

@ -116,10 +116,8 @@ _gpgme_passphrase_status_handler (void *priv, gpgme_status_code_t code,
gpgme_error_t gpgme_error_t
_gpgme_passphrase_command_handler_internal (void *priv, _gpgme_passphrase_command_handler (void *priv, gpgme_status_code_t code,
gpgme_status_code_t code, const char *key, int fd, int *processed)
const char *key, int fd,
int *processed)
{ {
gpgme_ctx_t ctx = (gpgme_ctx_t) priv; gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
gpgme_error_t err; gpgme_error_t err;
@ -153,12 +151,3 @@ _gpgme_passphrase_command_handler_internal (void *priv,
return 0; return 0;
} }
gpgme_error_t
_gpgme_passphrase_command_handler (void *priv, gpgme_status_code_t code,
const char *key, int fd)
{
return _gpgme_passphrase_command_handler_internal (priv, code, key, fd,
NULL);
}

View File

@ -478,15 +478,21 @@ command_handler (void *opaque, int fd)
{ {
gpgme_error_t err; gpgme_error_t err;
engine_gpg_t gpg = (engine_gpg_t) opaque; engine_gpg_t gpg = (engine_gpg_t) opaque;
int processed = 0;
assert (gpg->cmd.used); assert (gpg->cmd.used);
assert (gpg->cmd.code); assert (gpg->cmd.code);
assert (gpg->cmd.fnc); assert (gpg->cmd.fnc);
err = gpg->cmd.fnc (gpg->cmd.fnc_value, gpg->cmd.code, gpg->cmd.keyword, fd); err = gpg->cmd.fnc (gpg->cmd.fnc_value, gpg->cmd.code, gpg->cmd.keyword, fd,
&processed);
if (err) if (err)
return err; return err;
/* We always need to send at least a newline character. */
if (!processed)
write (fd, "\n", 1);
gpg->cmd.code = 0; gpg->cmd.code = 0;
/* And sleep again until read_status will wake us up again. */ /* And sleep again until read_status will wake us up again. */
/* XXX We must check if there are any more fds active after removing /* XXX We must check if there are any more fds active after removing