changeset 19899:ef466c52207b

doveadm: Changed doveadm_cmd_param_array() to return C-string array instead of ARRAY() We could support both with separate functions, but perhaps this one is enough.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sun, 28 Feb 2016 18:48:15 +0200
parents 130ebf573dde
children 6f760a1def9f
files src/doveadm/client-connection-http.c src/doveadm/doveadm-cmd.c src/doveadm/doveadm-cmd.h
diffstat 3 files changed, 11 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/doveadm/client-connection-http.c	Mon Feb 29 17:25:31 2016 +0200
+++ b/src/doveadm/client-connection-http.c	Sun Feb 28 18:48:15 2016 +0200
@@ -303,7 +303,7 @@
 
 	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;
--- a/src/doveadm/doveadm-cmd.c	Mon Feb 29 17:25:31 2016 +0200
+++ b/src/doveadm/doveadm-cmd.c	Sun Feb 28 18:48:15 2016 +0200
@@ -181,7 +181,7 @@
 	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_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;
--- a/src/doveadm/doveadm-cmd.h	Mon Feb 29 17:25:31 2016 +0200
+++ b/src/doveadm/doveadm-cmd.h	Sun Feb 28 18:48:15 2016 +0200
@@ -72,7 +72,7 @@
 	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_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);