From: Timo Sirainen Date: Wed, 12 May 2010 14:45:40 +0000 (+0200) Subject: doveadm help: Fixed to work with multi-word commands. X-Git-Tag: 2.0.beta6~244 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fab850a6aee4aaef4f4795bd7946807a3ba45041;p=thirdparty%2Fdovecot%2Fcore.git doveadm help: Fixed to work with multi-word commands. --HG-- branch : HEAD --- diff --git a/src/doveadm/doveadm-mail.c b/src/doveadm/doveadm-mail.c index 52d9bc839c..eee3cd439b 100644 --- a/src/doveadm/doveadm-mail.c +++ b/src/doveadm/doveadm-mail.c @@ -406,7 +406,7 @@ void doveadm_mail_help(const struct doveadm_mail_cmd *cmd) exit(0); } -void doveadm_mail_help_name(const char *cmd_name) +void doveadm_mail_try_help_name(const char *cmd_name) { const struct doveadm_mail_cmd *cmd; @@ -414,6 +414,11 @@ void doveadm_mail_help_name(const char *cmd_name) if (strcmp(cmd->name, cmd_name) == 0) doveadm_mail_help(cmd); } +} + +void doveadm_mail_help_name(const char *cmd_name) +{ + doveadm_mail_try_help_name(cmd_name); i_fatal("Missing help for command %s", cmd_name); } diff --git a/src/doveadm/doveadm-mail.h b/src/doveadm/doveadm-mail.h index 677c90cb6c..3c25447800 100644 --- a/src/doveadm/doveadm-mail.h +++ b/src/doveadm/doveadm-mail.h @@ -30,6 +30,7 @@ void doveadm_mail_register_cmd(const struct doveadm_mail_cmd *cmd); void doveadm_mail_usage(void); void doveadm_mail_help(const struct doveadm_mail_cmd *cmd) ATTR_NORETURN; void doveadm_mail_help_name(const char *cmd_name) ATTR_NORETURN; +void doveadm_mail_try_help_name(const char *cmd_name); void doveadm_mail_init(void); void doveadm_mail_deinit(void); diff --git a/src/doveadm/doveadm.c b/src/doveadm/doveadm.c index 4b5e915e07..fcefd04c02 100644 --- a/src/doveadm/doveadm.c +++ b/src/doveadm/doveadm.c @@ -2,6 +2,7 @@ #include "lib.h" #include "array.h" +#include "str.h" #include "module-dir.h" #include "master-service.h" #include "master-service-settings.h" @@ -56,17 +57,27 @@ const char *unixdate2str(time_t timestamp) return buf; } -static void cmd_help(int argc ATTR_UNUSED, char *argv[]) +static void cmd_help(int argc, char *argv[]) { const struct doveadm_cmd *cmd; + string_t *name; + int i; if (argv[1] == NULL) usage(); - array_foreach(&doveadm_cmds, cmd) { - if (strcmp(cmd->name, argv[1]) == 0) - help(cmd); + + name = t_str_new(100); + for (i = 1; i < argc; i++) { + str_append(name, argv[i]); + + array_foreach(&doveadm_cmds, cmd) { + if (strcmp(cmd->name, str_c(name)) == 0) + help(cmd); + } + doveadm_mail_try_help_name(str_c(name)); + + str_append_c(name, ' '); } - doveadm_mail_help_name(argv[1]); usage(); }