#include <fcntl.h>
#include <signal.h>
-extern struct doveadm_cmd doveadm_cmd_instance[];
+extern struct doveadm_cmd_ver2 doveadm_cmd_instance[];
-static void instance_cmd_help(doveadm_command_t *cmd) ATTR_NORETURN;
+static void instance_cmd_help(const struct doveadm_cmd_ver2 *cmd) ATTR_NORETURN;
static bool pid_file_read(const char *path)
{
return found;
}
-static void cmd_instance_list(int argc, char *argv[])
+static void cmd_instance_list(struct doveadm_cmd_context *cctx)
{
struct master_instance_list *list;
struct master_instance_list_iter *iter;
const struct master_instance *inst;
const char *instance_path, *pidfile_path;
bool show_config = FALSE;
- int c;
-
- while ((c = getopt(argc, argv, "c")) > 0) {
- switch (c) {
- case 'c':
- show_config = TRUE;
- break;
- default:
- help(&doveadm_cmd_instance[0]);
- }
- }
- argv += optind;
+ const char *name = NULL;
+
+ (void)doveadm_cmd_param_bool(cctx, "show-config", &show_config);
+ (void)doveadm_cmd_param_str(cctx, "name", &name);
if (!show_config) {
doveadm_print_init(DOVEADM_PRINT_TYPE_TABLE);
list = master_instance_list_init(instance_path);
iter = master_instance_list_iterate_init(list);
while ((inst = master_instance_iterate_list_next(iter)) != NULL) {
- if (argv[0] != NULL && strcmp(argv[0], inst->name) != 0)
+ if (name != NULL && strcmp(name, inst->name) != 0)
continue;
if (show_config) {
master_instance_list_deinit(&list);
}
-static void cmd_instance_remove(int argc, char *argv[])
+static void cmd_instance_remove(struct doveadm_cmd_context *cctx)
{
struct master_instance_list *list;
const struct master_instance *inst;
- const char *base_dir, *instance_path;
+ const char *base_dir, *instance_path, *name;
int ret;
- if (argc != 2)
- instance_cmd_help(cmd_instance_remove);
+ if (!doveadm_cmd_param_str(cctx, "name", &name))
+ instance_cmd_help(cctx->cmd);
instance_path = t_strconcat(service_set->state_dir,
"/"MASTER_INSTANCE_FNAME, NULL);
list = master_instance_list_init(instance_path);
- inst = master_instance_list_find_by_name(list, argv[1]);
- base_dir = inst != NULL ? inst->base_dir : argv[1];
+ inst = master_instance_list_find_by_name(list, name);
+ base_dir = inst != NULL ? inst->base_dir : name;
if ((ret = master_instance_list_remove(list, base_dir)) < 0) {
i_error("Failed to remove instance");
doveadm_exit_code = EX_TEMPFAIL;
master_instance_list_deinit(&list);
}
-struct doveadm_cmd doveadm_cmd_instance[] = {
- { cmd_instance_list, "instance list", "[-c] [<name>]" },
- { cmd_instance_remove, "instance remove", "<name> | <base dir>" }
+struct doveadm_cmd_ver2 doveadm_cmd_instance[] = {
+{
+ .name = "instance list",
+ .cmd = cmd_instance_list,
+ .usage = "[-c] [<name>]",
+DOVEADM_CMD_PARAMS_START
+DOVEADM_CMD_PARAM('c', "show-config", CMD_PARAM_BOOL, 0)
+DOVEADM_CMD_PARAM('\0', "name", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAMS_END
+},
+{
+ .name = "instance remove",
+ .cmd = cmd_instance_remove,
+ .usage = "<name> | <base dir>",
+DOVEADM_CMD_PARAMS_START
+DOVEADM_CMD_PARAM('\0', "name", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAMS_END
+}
};
-static void instance_cmd_help(doveadm_command_t *cmd)
+static void instance_cmd_help(const struct doveadm_cmd_ver2 *cmd)
{
unsigned int i;
for (i = 0; i < N_ELEMENTS(doveadm_cmd_instance); i++) {
- if (doveadm_cmd_instance[i].cmd == cmd)
- help(&doveadm_cmd_instance[i]);
+ if (doveadm_cmd_instance[i].cmd == cmd->cmd)
+ help_ver2(&doveadm_cmd_instance[i]);
}
i_unreached();
}
unsigned int i;
for (i = 0; i < N_ELEMENTS(doveadm_cmd_instance); i++)
- doveadm_register_cmd(&doveadm_cmd_instance[i]);
+ doveadm_cmd_register_ver2(&doveadm_cmd_instance[i]);
}