]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm dict iter: Support printing multiple values
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 17 Nov 2020 15:26:28 +0000 (17:26 +0200)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Mon, 23 Nov 2020 12:04:46 +0000 (12:04 +0000)
src/doveadm/doveadm-dict.c

index 57806bd3717b13a6c2603b08eb174b379f7188f9..add069ccf909cde316cb96cb9b70b9b0060fca89 100644 (file)
@@ -212,7 +212,8 @@ static void cmd_dict_iter(struct doveadm_cmd_context *cctx)
        struct dict *dict;
        struct dict_iterate_context *iter;
        enum dict_iterate_flags iter_flags = 0;
-       const char *prefix, *key, *value, *error;
+       const char *prefix, *key, *const *values, *error;
+       bool header_printed = FALSE;
 
        if (cmd_dict_init_full(cctx, cmd_dict_iter, &iter_flags, &dict) < 0)
                return;
@@ -225,10 +226,18 @@ static void cmd_dict_iter(struct doveadm_cmd_context *cctx)
        (void)doveadm_cmd_param_str(cctx, "prefix", &prefix);
 
        iter = dict_iterate_init(dict, prefix, iter_flags);
-       while (dict_iterate(iter, &key, &value)) {
+       while (dict_iterate_values(iter, &key, &values)) {
+               unsigned int values_count = str_array_length(values);
+               if (!header_printed) {
+                       for (unsigned int i = 1; i < values_count; i++)
+                               doveadm_print_header_simple("value");
+                       header_printed = TRUE;
+               }
                doveadm_print(key);
-               if ((iter_flags & DICT_ITERATE_FLAG_NO_VALUE) == 0)
-                       doveadm_print(value);
+               if ((iter_flags & DICT_ITERATE_FLAG_NO_VALUE) == 0) {
+                       for (unsigned int i = 0; i < values_count; i++)
+                               doveadm_print(values[i]);
+               }
        }
        if (dict_iterate_deinit(&iter, &error) < 0) {
                i_error("dict_iterate_deinit(%s) failed: %s", prefix, error);