]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Add exit code/string conversion functions
authorAki Tuomi <aki.tuomi@dovecot.fi>
Wed, 22 Mar 2017 17:21:55 +0000 (19:21 +0200)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Wed, 22 Mar 2017 17:25:10 +0000 (19:25 +0200)
src/doveadm/doveadm-cmd.c
src/doveadm/doveadm.h

index aa6daed95f58964576f1e0152ad9b7f44fa6b827..c6b143733e449a3e3c37e8a8e03b8f652eb3eb9c 100644 (file)
@@ -31,10 +31,44 @@ static struct doveadm_cmd_ver2 *doveadm_commands_ver2[] = {
        &doveadm_cmd_who_ver2
 };
 
+static const struct exit_code_str {
+       int code;
+       const char *str;
+} exit_code_strings[] = {
+       { DOVEADM_EX_UNKNOWN, "UNKNOWN" },
+       { EX_TEMPFAIL, "TEMPFAIL" },
+       { EX_USAGE, "USAGE" },
+       { EX_NOUSER, "NOUSER" },
+       { EX_NOPERM, "NOPERM" },
+       { EX_PROTOCOL, "PROTOCOL" },
+       { EX_DATAERR, "DATAERR" },
+       { DOVEADM_EX_NOTFOUND, "NOTFOUND" }
+};
+
 ARRAY_TYPE(doveadm_cmd) doveadm_cmds;
 ARRAY_TYPE(doveadm_cmd_ver2) doveadm_cmds_ver2;
 ARRAY_DEFINE_TYPE(getopt_option_array, struct option);
 
+const char *doveadm_exit_code_to_str(int code)
+{
+       for(size_t i = 0; i < N_ELEMENTS(exit_code_strings); i++) {
+               const struct exit_code_str *ptr = &exit_code_strings[i];
+               if (ptr->code == code)
+                       return ptr->str;
+       }
+       return "UNKNOWN";
+}
+
+int doveadm_str_to_exit_code(const char *reason)
+{
+       for(size_t i = 0; i < N_ELEMENTS(exit_code_strings); i++) {
+               const struct exit_code_str *ptr = &exit_code_strings[i];
+               if (strcmp(ptr->str, reason) == 0)
+                       return ptr->code;
+       }
+       return DOVEADM_EX_UNKNOWN;
+}
+
 void doveadm_register_cmd(const struct doveadm_cmd *cmd)
 {
        array_append(&doveadm_cmds, cmd, 1);
index 726485c2aaa764ab5b575fec57003282f0c1653c..89f5c8dc6254fb84bffd743f11390946d7cb5d7c 100644 (file)
@@ -10,6 +10,7 @@
 
 #define DOVEADM_EX_NOTFOUND EX_NOHOST
 #define DOVEADM_EX_NOTPOSSIBLE EX_DATAERR
+#define DOVEADM_EX_UNKNOWN -1
 
 extern bool doveadm_verbose_proctitle;
 extern int doveadm_exit_code;
@@ -19,4 +20,7 @@ void help(const struct doveadm_cmd *cmd) ATTR_NORETURN;
 void help_ver2(const struct doveadm_cmd_ver2 *cmd) ATTR_NORETURN;
 void doveadm_master_send_signal(int signo);
 
+const char *doveadm_exit_code_to_str(int code);
+int doveadm_str_to_exit_code(const char *reason);
+
 #endif