doveadm_print_init(DOVEADM_PRINT_TYPE_JSON);
/* then call it */
- cctx.argv = array_get(&conn->pargv, (unsigned int*)&cctx.argc);
+ cctx.argv = array_get_modifiable(&conn->pargv, (unsigned int*)&cctx.argc);
ioloop = io_loop_create();
lib_signals_reset_ioloop();
doveadm_exit_code = 0;
array_free(&doveadm_cmds_ver2);
}
-static const struct doveadm_cmd_param*
+static struct doveadm_cmd_param*
doveadm_cmd_param_get(const struct doveadm_cmd_context *cctx,
const char *name)
{
}
bool doveadm_cmd_param_array(const struct doveadm_cmd_context *cctx,
- const char *name, ARRAY_TYPE(const_string) **value_r)
+ const char *name, const char *const **value_r)
{
- const struct doveadm_cmd_param *param;
+ struct doveadm_cmd_param *param;
if ((param = doveadm_cmd_param_get(cctx, name))==NULL) return FALSE;
if (param->type == CMD_PARAM_ARRAY) {
- *value_r = (ARRAY_TYPE(const_string)*)&(param->value.v_array);
+ /* NULL-terminate the array, but don't leave it there */
+ array_append_zero(¶m->value.v_array);
+ array_delete(¶m->value.v_array,
+ array_count(¶m->value.v_array)-1, 1);
+ *value_r = array_idx(¶m->value.v_array, 0);
return TRUE;
}
return FALSE;
const struct doveadm_cmd_ver2 *cmd; /* for help */
int argc;
- const struct doveadm_cmd_param *argv;
+ struct doveadm_cmd_param *argv;
const char *username;
bool cli;
bool doveadm_cmd_param_ip(const struct doveadm_cmd_context *cctx,
const char *name, struct ip_addr *value_r);
bool doveadm_cmd_param_array(const struct doveadm_cmd_context *cctx,
- const char *name, ARRAY_TYPE(const_string) **value_r);
+ const char *name, const char *const **value_r);
bool doveadm_cmd_param_istream(const struct doveadm_cmd_context *cctx,
const char *name, struct istream **value_r);