]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Changed doveadm_cmd_param_array() to return C-string array instead of ARRAY()
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Sun, 28 Feb 2016 16:48:15 +0000 (18:48 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 29 Feb 2016 23:32:07 +0000 (01:32 +0200)
We could support both with separate functions, but perhaps this one is enough.

src/doveadm/client-connection-http.c
src/doveadm/doveadm-cmd.c
src/doveadm/doveadm-cmd.h

index 076116a1a5e457a69ed5d1fc686133190f3fc39f..f4f0c9abdde6238e224177a12a2b82fc101f3b4b 100644 (file)
@@ -303,7 +303,7 @@ doveadm_http_server_command_execute(struct client_connection_http *conn)
 
        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;
index 3ce4507a9403dabff2b9d6235f52779156dd3a35..1fc7a54d5306c32be22ef96b0439ef6d809c5c0b 100644 (file)
@@ -181,7 +181,7 @@ void doveadm_cmds_deinit(void)
        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)
 {
@@ -247,12 +247,16 @@ bool doveadm_cmd_param_ip(const struct doveadm_cmd_context *cctx,
 }
 
 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(&param->value.v_array);
+               array_delete(&param->value.v_array,
+                            array_count(&param->value.v_array)-1, 1);
+               *value_r = array_idx(&param->value.v_array, 0);
                return TRUE;
        }
        return FALSE;
index ebd84d669f39c8c8bd052166aaa52ef89f88b193..5e80cd661029871121a04ebc9de59025c55bf952 100644 (file)
@@ -72,7 +72,7 @@ struct doveadm_cmd_context {
        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;
@@ -137,7 +137,7 @@ bool doveadm_cmd_param_str(const struct doveadm_cmd_context *cctx,
 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);