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