From: Aki Tuomi Date: Wed, 22 Mar 2017 17:21:55 +0000 (+0200) Subject: doveadm: Add exit code/string conversion functions X-Git-Tag: 2.3.0.rc1~1915 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c466bbccb4b8b0026aea13540ebdef3bddbd67dd;p=thirdparty%2Fdovecot%2Fcore.git doveadm: Add exit code/string conversion functions --- diff --git a/src/doveadm/doveadm-cmd.c b/src/doveadm/doveadm-cmd.c index aa6daed95f..c6b143733e 100644 --- a/src/doveadm/doveadm-cmd.c +++ b/src/doveadm/doveadm-cmd.c @@ -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); diff --git a/src/doveadm/doveadm.h b/src/doveadm/doveadm.h index 726485c2aa..89f5c8dc62 100644 --- a/src/doveadm/doveadm.h +++ b/src/doveadm/doveadm.h @@ -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