]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm help: Fixed to work with multi-word commands.
authorTimo Sirainen <tss@iki.fi>
Wed, 12 May 2010 14:45:40 +0000 (16:45 +0200)
committerTimo Sirainen <tss@iki.fi>
Wed, 12 May 2010 14:45:40 +0000 (16:45 +0200)
--HG--
branch : HEAD

src/doveadm/doveadm-mail.c
src/doveadm/doveadm-mail.h
src/doveadm/doveadm.c

index 52d9bc839c740e97757bab368778f20775a13273..eee3cd439b816a159d41ded8d5d9bccafb0e0f9f 100644 (file)
@@ -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);
 }
 
index 677c90cb6ca32215caf9f936c257e5420974784e..3c25447800bf46098b376f598d85cc6d3a470833 100644 (file)
@@ -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);
index 4b5e915e07b3ed36cf08f45190c3fcd7268e1fa2..fcefd04c02828a40de855d6d03e7099356e68dec 100644 (file)
@@ -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();
 }