]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Add doveadm_cmd_param_dump() doveadm_cmd_args_dump() debug functions
authorMarco Bettini <marco.bettini@open-xchange.com>
Thu, 28 Apr 2022 08:37:49 +0000 (08:37 +0000)
committerMarco Bettini <marco.bettini@open-xchange.com>
Wed, 1 Jun 2022 10:02:11 +0000 (10:02 +0000)
src/doveadm/doveadm-cmd-parse.c
src/doveadm/doveadm-cmd-parse.h

index c33bd969e54b7bf855175f901fd0df63bfb75a73..43f0eeabb043561823ec259558e0a24138d8d1f4 100644 (file)
@@ -4,6 +4,7 @@
 #include "array.h"
 #include "istream.h"
 #include "str.h"
+#include "strescape.h"
 #include "net.h"
 #include "doveadm.h"
 #include "doveadm-cmd-parse.h"
@@ -403,3 +404,68 @@ int doveadm_cmdline_run(int argc, const char *const argv[],
        doveadm_cmd_params_clean(&pargv);
        return 0;
 }
+
+static const char*
+doveadm_cmd_param_tostring(const struct doveadm_cmd_param *argv)
+{
+       if (!argv->value_set)
+               return "";
+       switch(argv->type) {
+       case CMD_PARAM_ISTREAM:
+               return "stream";
+       case CMD_PARAM_BOOL:
+               return argv->value.v_bool ? "TRUE" : "FALSE";
+       case CMD_PARAM_IP:
+               return net_ip2addr(&argv->value.v_ip);
+       case CMD_PARAM_INT64:
+               return t_strdup_printf("%ld", argv->value.v_int64);
+       case CMD_PARAM_STR: {
+               const char *item = argv->value.v_string;
+               size_t item_len = strlen(item);
+               string_t *value = t_str_new(item_len + 2);
+               str_append_c(value, '"');
+               str_append_escaped(value, item, item_len);
+               str_append_c(value, '"');
+               return str_c(value);
+       }
+       case CMD_PARAM_ARRAY: {
+               string_t *value = t_str_new(64);
+               const char *const *item;
+               array_foreach(&argv->value.v_array, item) {
+                       if (str_len(value) > 0) str_append(value, ", ");
+                       str_append_c(value, '"');
+                       str_append_escaped(value, *item, strlen(*item));
+                       str_append_c(value, '"');
+               }
+               return str_c(value);
+       }
+       default:
+               return "";
+       }
+}
+
+void doveadm_cmd_params_dump(const struct doveadm_cmd_context *cctx)
+{
+       i_debug("%s()", __func__);
+       i_assert(cctx != NULL);
+       i_assert(cctx->argv != NULL);
+       const struct doveadm_cmd_param *argv = cctx->argv;
+       for (int index = 0; index < cctx->argc; index++, argv++) T_BEGIN {
+               const char *value = doveadm_cmd_param_tostring(argv);
+               i_debug("    %c%c%c%c %02x/%02x -%c %s: %s",
+                       *value != '\0' ? 'S': '-',
+                       argv->type == CMD_PARAM_ARRAY ? 'A': '-',
+                       (argv->flags & CMD_PARAM_FLAG_POSITIONAL) != 0 ? 'P': '-',
+                       (argv->flags & CMD_PARAM_FLAG_KEY_VALUE) != 0 ? 'N': '-',
+                       (int)argv->type, (int)argv->flags,
+                       argv->short_opt != '\0' ? argv->short_opt : '-',
+                       argv->name, value);
+       } T_END;
+}
+
+void doveadm_cmd_args_dump(const char *const *items)
+{
+       i_debug("%s()", __func__);
+       for (; *items != NULL; items++)
+               i_debug("    %s", *items);
+}
index eee77dfdd1cf3b254d4ac76f58560fd4e2459efe..ccbabaa43461806d5167e69850e00e9d345da044 100644 (file)
@@ -155,4 +155,8 @@ bool doveadm_cmd_param_istream(const struct doveadm_cmd_context *cctx,
 void doveadm_cmd_params_clean(ARRAY_TYPE(doveadm_cmd_param_arr_t) *pargv);
 void doveadm_cmd_params_null_terminate_arrays(ARRAY_TYPE(doveadm_cmd_param_arr_t) *pargv);
 
+/* debug functions */
+void doveadm_cmd_args_dump(const char *const *items);
+void doveadm_cmd_params_dump(const struct doveadm_cmd_context *cctx);
+
 #endif