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:
parent
82a0c97250
commit
9f952a5a0b
2
TODO
2
TODO
@ -6,6 +6,8 @@ Hey Emacs, this is -*- outline -*- mode!
|
||||
** Add notation data to key signatures.
|
||||
|
||||
* 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
|
||||
without breaking the ABI hopefully.
|
||||
* All enums that should be enums need to have a maximum value to ensure
|
||||
|
@ -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>
|
||||
|
||||
* w32-util.c (read_w32_registry_string): Updated from code used by
|
||||
|
15
gpgme/edit.c
15
gpgme/edit.c
@ -63,21 +63,20 @@ edit_status_handler (void *priv, gpgme_status_code_t status, char *args)
|
||||
|
||||
static gpgme_error_t
|
||||
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_error_t err;
|
||||
int processed = 0;
|
||||
|
||||
if (ctx->passphrase_cb)
|
||||
{
|
||||
err = _gpgme_passphrase_command_handler_internal (ctx, status, args,
|
||||
fd, &processed);
|
||||
err = _gpgme_passphrase_command_handler (ctx, status, args,
|
||||
fd, processed);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
if (!processed)
|
||||
if (!*processed)
|
||||
{
|
||||
void *hook;
|
||||
op_data_t opd;
|
||||
@ -87,8 +86,14 @@ command_handler (void *priv, gpgme_status_code_t status, const char *args,
|
||||
if (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 0;
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
gpgme_status_code_t code,
|
||||
const char *keyword,
|
||||
int fd);
|
||||
int fd, int *processed);
|
||||
|
||||
/* 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);
|
||||
|
@ -103,9 +103,6 @@ gpgme_error_t _gpgme_passphrase_status_handler (void *priv,
|
||||
gpgme_status_code_t code,
|
||||
char *args);
|
||||
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,
|
||||
const char *key, int fd,
|
||||
int *processed);
|
||||
|
@ -116,10 +116,8 @@ _gpgme_passphrase_status_handler (void *priv, gpgme_status_code_t code,
|
||||
|
||||
|
||||
gpgme_error_t
|
||||
_gpgme_passphrase_command_handler_internal (void *priv,
|
||||
gpgme_status_code_t code,
|
||||
const char *key, int fd,
|
||||
int *processed)
|
||||
_gpgme_passphrase_command_handler (void *priv, gpgme_status_code_t code,
|
||||
const char *key, int fd, int *processed)
|
||||
{
|
||||
gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
|
||||
gpgme_error_t err;
|
||||
@ -153,12 +151,3 @@ _gpgme_passphrase_command_handler_internal (void *priv,
|
||||
|
||||
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);
|
||||
}
|
||||
|
@ -478,15 +478,21 @@ command_handler (void *opaque, int fd)
|
||||
{
|
||||
gpgme_error_t err;
|
||||
engine_gpg_t gpg = (engine_gpg_t) opaque;
|
||||
int processed = 0;
|
||||
|
||||
assert (gpg->cmd.used);
|
||||
assert (gpg->cmd.code);
|
||||
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)
|
||||
return err;
|
||||
|
||||
/* We always need to send at least a newline character. */
|
||||
if (!processed)
|
||||
write (fd, "\n", 1);
|
||||
|
||||
gpg->cmd.code = 0;
|
||||
/* And sleep again until read_status will wake us up again. */
|
||||
/* XXX We must check if there are any more fds active after removing
|
||||
|
Loading…
Reference in New Issue
Block a user