#include "doveadm-mail.h"
#include <stdio.h>
+#include <stdlib.h>
ARRAY_TYPE(doveadm_mail_cmd) doveadm_mail_cmds;
struct mailbox *box;
if (mailbox == NULL)
- usage();
+ doveadm_mail_help_name("force-resync");
box = mailbox_find_and_open(user, mailbox);
storage = mailbox_get_storage(box);
}
static void
-doveadm_mail_cmd(doveadm_mail_command_t *cmd, int argc, char *argv[])
+doveadm_mail_cmd(const struct doveadm_mail_cmd *cmd, int argc, char *argv[])
{
enum mail_storage_service_flags service_flags = 0;
const char *username;
service_flags |= MAIL_STORAGE_SERVICE_FLAG_DEBUG;
break;
default:
- usage();
+ doveadm_mail_help(cmd);
}
}
if (!all_users) {
if (optind == argc)
- usage();
+ doveadm_mail_help(cmd);
service_flags |= MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP;
username = argv[optind++];
- doveadm_mail_single_user(cmd, username, service_flags,
+ doveadm_mail_single_user(cmd->cmd, username, service_flags,
(const char **)argv + optind);
} else {
service_flags |= MAIL_STORAGE_SERVICE_FLAG_TEMP_PRIV_DROP;
- doveadm_mail_all_users(cmd, service_flags,
+ doveadm_mail_all_users(cmd->cmd, service_flags,
(const char **)argv + optind);
}
}
array_foreach(&doveadm_mail_cmds, cmd) {
if (strcmp(cmd->name, cmd_name) == 0) {
- doveadm_mail_cmd(cmd->cmd, argc, argv);
+ doveadm_mail_cmd(cmd, argc, argv);
return TRUE;
}
}
}
}
+void doveadm_mail_help(const struct doveadm_mail_cmd *cmd)
+{
+ fprintf(stderr, "doveadm %s %s\n", cmd->name,
+ cmd->usage_args == NULL ? "" : cmd->usage_args);
+ exit(0);
+}
+
+void doveadm_mail_help_name(const char *cmd_name)
+{
+ const struct doveadm_mail_cmd *cmd;
+
+ array_foreach(&doveadm_mail_cmds, cmd) {
+ if (strcmp(cmd->name, cmd_name) == 0)
+ doveadm_mail_help(cmd);
+ }
+}
+
static struct doveadm_mail_cmd mail_commands[] = {
{ cmd_purge, "purge", NULL },
{ cmd_force_resync, "force-resync", "<mailbox>" }