Mercurial > dovecot > core-2.2
changeset 21783:d0a35b1482d6
doveadm: Add exit code/string conversion functions
author | Aki Tuomi <aki.tuomi@dovecot.fi> |
---|---|
date | Wed, 22 Mar 2017 19:21:55 +0200 |
parents | 9be4810c8033 |
children | b7f788e99e86 |
files | src/doveadm/doveadm-cmd.c src/doveadm/doveadm.h |
diffstat | 2 files changed, 38 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/doveadm/doveadm-cmd.c Thu Mar 02 23:12:45 2017 +0100 +++ b/src/doveadm/doveadm-cmd.c Wed Mar 22 19:21:55 2017 +0200 @@ -31,10 +31,44 @@ &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);
--- a/src/doveadm/doveadm.h Thu Mar 02 23:12:45 2017 +0100 +++ b/src/doveadm/doveadm.h Wed Mar 22 19:21:55 2017 +0200 @@ -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_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