diff options
author | [email protected] <[email protected]> | 2011-03-06 01:06:57 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2011-03-09 19:21:57 +0000 |
commit | 79bb873edd4696fc56a0aaf91c9d11c3791691c0 (patch) | |
tree | 176ea54e152e25ec8c672463e77fc3e001d9a5b5 | |
parent | Simplify libassuan.vers (diff) | |
download | libassuan-79bb873edd4696fc56a0aaf91c9d11c3791691c0.tar.gz libassuan-79bb873edd4696fc56a0aaf91c9d11c3791691c0.zip |
Let an existing command previously registered with assuan_register_command() be updated with new values. This fixes overriding the HELP command for example.
-rw-r--r-- | src/ChangeLog | 5 | ||||
-rw-r--r-- | src/assuan-handler.c | 21 |
2 files changed, 21 insertions, 5 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index a12b9cb..5568549 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2011-03-05 Ben Kibbey <[email protected]> + + * assuan-handler.c (assuan_register_command): Let an existing command + be updated to the new values. + 2011-02-28 Werner Koch <[email protected]> * libassuan.vers: Fold LIBASSUAN_1.1 block into LIBASSUAN_1.0. diff --git a/src/assuan-handler.c b/src/assuan-handler.c index cb271fa..799d058 100644 --- a/src/assuan-handler.c +++ b/src/assuan-handler.c @@ -365,7 +365,7 @@ gpg_error_t assuan_register_command (assuan_context_t ctx, const char *cmd_name, assuan_handler_t handler, const char *help_string) { - int i; + int i, cmd_index = -1; const char *s; if (cmd_name && !*cmd_name) @@ -409,10 +409,21 @@ assuan_register_command (assuan_context_t ctx, const char *cmd_name, ctx->cmdtbl_size += 50; } - ctx->cmdtbl[ctx->cmdtbl_used].name = cmd_name; - ctx->cmdtbl[ctx->cmdtbl_used].handler = handler; - ctx->cmdtbl[ctx->cmdtbl_used].helpstr = help_string; - ctx->cmdtbl_used++; + for (i=0; i<ctx->cmdtbl_used; i++) + { + if (!strcasecmp(ctx->cmdtbl[i].name, cmd_name)) + { + cmd_index = i; + break; + } + } + + if (cmd_index == -1) + cmd_index = ctx->cmdtbl_used++; + + ctx->cmdtbl[cmd_index].name = cmd_name; + ctx->cmdtbl[cmd_index].handler = handler; + ctx->cmdtbl[cmd_index].helpstr = help_string; return 0; } |