From 79bb873edd4696fc56a0aaf91c9d11c3791691c0 Mon Sep 17 00:00:00 2001 From: "bjk@luxsci.net" Date: Sat, 5 Mar 2011 20:06:57 -0500 Subject: Let an existing command previously registered with assuan_register_command() be updated with new values. This fixes overriding the HELP command for example. --- src/ChangeLog | 5 +++++ 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 + + * assuan-handler.c (assuan_register_command): Let an existing command + be updated to the new values. + 2011-02-28 Werner Koch * 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; icmdtbl_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; } -- cgit v1.2.3