dovecot-2.0: doveadm: Added support for multi-word commands.
dovecot at dovecot.org
dovecot at dovecot.org
Fri Apr 30 17:51:03 EEST 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/65e21dc80414
changeset: 11242:65e21dc80414
user: Timo Sirainen <tss at iki.fi>
date: Fri Apr 30 17:50:01 2010 +0300
description:
doveadm: Added support for multi-word commands.
diffstat:
src/doveadm/doveadm-mail.c | 41 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 41 insertions(+), 0 deletions(-)
diffs (61 lines):
diff -r be74fa9bfcc9 -r 65e21dc80414 src/doveadm/doveadm-mail.c
--- a/src/doveadm/doveadm-mail.c Fri Apr 30 16:24:33 2010 +0300
+++ b/src/doveadm/doveadm-mail.c Fri Apr 30 17:50:01 2010 +0300
@@ -277,16 +277,57 @@
}
}
+static bool
+doveadm_mail_try_run_multi_word(const struct doveadm_mail_cmd *cmd,
+ const char *cmdname, int argc, char *argv[])
+{
+ unsigned int len;
+
+ if (argc < 1)
+ return FALSE;
+
+ len = strlen(argv[1]);
+ if (strncmp(cmdname, argv[1], len) != 0)
+ return FALSE;
+
+ if (cmdname[len] == ' ') {
+ /* more args */
+ return doveadm_mail_try_run_multi_word(cmd, cmdname + len + 1,
+ argc - 1, argv + 1);
+ }
+ if (cmdname[len] != '\0')
+ return FALSE;
+
+ /* match */
+ doveadm_mail_cmd(cmd, argc - 1, argv + 1);
+ return TRUE;
+}
+
bool doveadm_mail_try_run(const char *cmd_name, int argc, char *argv[])
{
const struct doveadm_mail_cmd *cmd;
+ unsigned int cmd_name_len;
+ i_assert(argc > 0);
+
+ cmd_name_len = strlen(cmd_name);
array_foreach(&doveadm_mail_cmds, cmd) {
if (strcmp(cmd->name, cmd_name) == 0) {
doveadm_mail_cmd(cmd, argc, argv);
return TRUE;
}
+
+ /* see if it matches a multi-word command */
+ if (strncmp(cmd->name, cmd_name, cmd_name_len) == 0 &&
+ cmd->name[cmd_name_len] == ' ') {
+ const char *subcmd = cmd->name + cmd_name_len + 1;
+
+ if (doveadm_mail_try_run_multi_word(cmd, subcmd,
+ argc, argv))
+ return TRUE;
+ }
}
+
return FALSE;
}
More information about the dovecot-cvs
mailing list