changeset 19779:d5a022d714ea

doveadm: Use char type for short options instead of a string. The ":" = "has parameters" can be determined from the type. Also removed "?" checks since it wasn't actually used.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Fri, 19 Feb 2016 16:36:00 +0200
parents 3432ea258fe9
children b5bbac21e96e
files src/doveadm/doveadm-cmd.c src/doveadm/doveadm-cmd.h src/doveadm/doveadm-mail-mailbox-metadata.c src/doveadm/doveadm-mail-mailbox-status.c src/doveadm/doveadm-mail-mailbox.c src/doveadm/doveadm-mail.c src/doveadm/doveadm-mail.h
diffstat 7 files changed, 42 insertions(+), 55 deletions(-) [+]
line wrap: on
line diff
--- a/src/doveadm/doveadm-cmd.c	Fri Feb 19 16:34:53 2016 +0200
+++ b/src/doveadm/doveadm-cmd.c	Fri Feb 19 16:36:00 2016 +0200
@@ -250,9 +250,8 @@
 	i_assert(array_count(argv) == 0);
 	array_append(argv, &name, 1);
 	for(i=0;i<pargc;i++) {
-		if (params[i].value_set && params[i].opt != NULL &&
-			*(params[i].opt) != ':' && *(params[i].opt) != '?') {
-			const char *optarg = t_strdup_printf("-%c", params[i].opt[0]);
+		if (params[i].value_set && params[i].short_opt != '\0') {
+			const char *optarg = t_strdup_printf("-%c", params[i].short_opt);
 			if (params[i].type == CMD_PARAM_STR) {
 	                        array_append(argv, &optarg, 1);
 				array_append(argv, &params[i].value.v_string,1);
@@ -297,28 +296,17 @@
 		string_t *shortopts,
 		ARRAY_TYPE(getopt_option_array) *longopts)
 {
-	const char *optp;
 	for(size_t i=0; par[i].name != NULL; i++) {
 		struct option longopt;
 		if ((par[i].flags & CMD_PARAM_FLAG_DO_NOT_EXPOSE) != 0) continue;
 		longopt.name = par[i].name;
 		longopt.flag = 0;
 		longopt.val = 0;
-		if (par[i].opt) {
-			optp = par[i].opt;
-			if (*optp != ':' && *optp != '?') {
-				longopt.val = *optp;
-				str_append_c(shortopts, *optp);
-				optp++;
-				if (optp[0] != '\0')
-					str_append_c(shortopts, *optp);
-			}
-			switch(*optp) {
-			case ':': longopt.has_arg = 1; break;
-			case '?': longopt.has_arg = 2; break;
-			default:
-				longopt.has_arg = 0;
-			}
+		if (par[i].short_opt != '\0') {
+			longopt.val = par[i].short_opt;
+			str_append_c(shortopts, par[i].short_opt);
+			if (par[i].type != CMD_PARAM_BOOL)
+				str_append_c(shortopts, ':');
 		} else {
 			longopt.has_arg = 0;
 		}
--- a/src/doveadm/doveadm-cmd.h	Fri Feb 19 16:34:53 2016 +0200
+++ b/src/doveadm/doveadm-cmd.h	Fri Feb 19 16:36:00 2016 +0200
@@ -2,8 +2,8 @@
 #define DOVEADM_CMD_H
 
 #define DOVEADM_CMD_PARAMS_START .parameters = (const struct doveadm_cmd_param[]){
-#define DOVEADM_CMD_PARAM(optP, nameP, typeP, flagP ) { .opt = optP, .name = nameP, .type = typeP, .flags = flagP },
-#define DOVEADM_CMD_PARAMS_END { .opt = NULL, .name = NULL, .type = CMD_PARAM_BOOL, .flags = CMD_PARAM_FLAG_NONE } }
+#define DOVEADM_CMD_PARAM(optP, nameP, typeP, flagP ) { .short_opt = optP, .name = nameP, .type = typeP, .flags = flagP },
+#define DOVEADM_CMD_PARAMS_END { .short_opt = '\0', .name = NULL, .type = CMD_PARAM_BOOL, .flags = CMD_PARAM_FLAG_NONE } }
 
 struct doveadm_cmd_ver2;
 struct doveadm_mail_cmd_context;
@@ -25,7 +25,7 @@
 } doveadm_cmd_param_flag_t;
 
 struct doveadm_cmd_param {
-	const char *opt;
+	char short_opt;
 	const char *name;
 	doveadm_cmd_param_t type;
 	bool value_set;
--- a/src/doveadm/doveadm-mail-mailbox-metadata.c	Fri Feb 19 16:34:53 2016 +0200
+++ b/src/doveadm/doveadm-mail-mailbox-metadata.c	Fri Feb 19 16:36:00 2016 +0200
@@ -292,9 +292,9 @@
 	.usage = "<mailbox> <key> <value>",
 DOVEADM_CMD_PARAMS_START
 DOVEADM_CMD_MAIL_COMMON
-DOVEADM_CMD_PARAM(":", "mailbox", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
-DOVEADM_CMD_PARAM(":", "key", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
-DOVEADM_CMD_PARAM(":", "value", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('\0', "mailbox", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('\0', "key", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('\0', "value", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
 DOVEADM_CMD_PARAMS_END
 };
 
@@ -304,8 +304,8 @@
 	.usage = "<mailbox> <key>",
 DOVEADM_CMD_PARAMS_START
 DOVEADM_CMD_MAIL_COMMON
-DOVEADM_CMD_PARAM(":", "mailbox", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
-DOVEADM_CMD_PARAM(":", "key", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('\0', "mailbox", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('\0', "key", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
 DOVEADM_CMD_PARAMS_END
 };
 
@@ -315,8 +315,8 @@
 	.usage = "<mailbox> <key>",
 DOVEADM_CMD_PARAMS_START
 DOVEADM_CMD_MAIL_COMMON
-DOVEADM_CMD_PARAM(":", "mailbox", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
-DOVEADM_CMD_PARAM(":", "key", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('\0', "mailbox", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('\0', "key", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
 DOVEADM_CMD_PARAMS_END
 };
 
@@ -326,6 +326,6 @@
 	.usage = "<mailbox> [<key prefix>]",
 DOVEADM_CMD_PARAMS_START
 DOVEADM_CMD_MAIL_COMMON
-DOVEADM_CMD_PARAM(":", "key-prefix", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('\0', "key-prefix", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
 DOVEADM_CMD_PARAMS_END
 };
--- a/src/doveadm/doveadm-mail-mailbox-status.c	Fri Feb 19 16:34:53 2016 +0200
+++ b/src/doveadm/doveadm-mail-mailbox-status.c	Fri Feb 19 16:36:00 2016 +0200
@@ -253,9 +253,9 @@
         .usage = "<mailbox> [...]",
 DOVEADM_CMD_PARAMS_START
 DOVEADM_CMD_MAIL_COMMON
-DOVEADM_CMD_PARAM("t", "total-sum", CMD_PARAM_BOOL, 0)
-DOVEADM_CMD_PARAM("f:", "field", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
-DOVEADM_CMD_PARAM(":", "fieldstr", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL | CMD_PARAM_FLAG_DO_NOT_EXPOSE) /* FIXME: horrible hack, remove me when possible */
-DOVEADM_CMD_PARAM(":", "mask", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('t', "total-sum", CMD_PARAM_BOOL, 0)
+DOVEADM_CMD_PARAM('f', "field", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('\0', "fieldstr", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL | CMD_PARAM_FLAG_DO_NOT_EXPOSE) /* FIXME: horrible hack, remove me when possible */
+DOVEADM_CMD_PARAM('\0', "mask", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
 DOVEADM_CMD_PARAMS_END
 };
--- a/src/doveadm/doveadm-mail-mailbox.c	Fri Feb 19 16:34:53 2016 +0200
+++ b/src/doveadm/doveadm-mail-mailbox.c	Fri Feb 19 16:36:00 2016 +0200
@@ -562,10 +562,10 @@
 	.usage = "[-7|-8] [-s] [<mailbox mask> [...]]",
 DOVEADM_CMD_PARAMS_START
 DOVEADM_CMD_MAIL_COMMON
-DOVEADM_CMD_PARAM("7", "mutf7", CMD_PARAM_BOOL, 0)
-DOVEADM_CMD_PARAM("8", "no-mutf7", CMD_PARAM_BOOL, 0)
-DOVEADM_CMD_PARAM("s", "subscriptions", CMD_PARAM_BOOL, 0)
-DOVEADM_CMD_PARAM(":", "mask", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('7', "mutf7", CMD_PARAM_BOOL, 0)
+DOVEADM_CMD_PARAM('8', "no-mutf7", CMD_PARAM_BOOL, 0)
+DOVEADM_CMD_PARAM('s', "subscriptions", CMD_PARAM_BOOL, 0)
+DOVEADM_CMD_PARAM('\0', "mask", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
 DOVEADM_CMD_PARAMS_END
 };
 
@@ -575,9 +575,9 @@
 	.usage = "[-s] [-g <guid>] <mailbox> [...]",
 DOVEADM_CMD_PARAMS_START
 DOVEADM_CMD_MAIL_COMMON
-DOVEADM_CMD_PARAM("s", "subscriptions", CMD_PARAM_BOOL, 0)
-DOVEADM_CMD_PARAM("g", "guid", CMD_PARAM_STR, 0)
-DOVEADM_CMD_PARAM(":", "mailbox", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('s', "subscriptions", CMD_PARAM_BOOL, 0)
+DOVEADM_CMD_PARAM('g', "guid", CMD_PARAM_STR, 0)
+DOVEADM_CMD_PARAM('\0', "mailbox", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
 DOVEADM_CMD_PARAMS_END
 };
 
@@ -587,8 +587,8 @@
         .usage = "[-s] <mailbox> [...]",
 DOVEADM_CMD_PARAMS_START
 DOVEADM_CMD_MAIL_COMMON
-DOVEADM_CMD_PARAM("s", "subscriptions", CMD_PARAM_BOOL, 0)
-DOVEADM_CMD_PARAM(":", "mailbox", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('s', "subscriptions", CMD_PARAM_BOOL, 0)
+DOVEADM_CMD_PARAM('\0', "mailbox", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
 DOVEADM_CMD_PARAMS_END
 };
 
@@ -598,9 +598,9 @@
 	.usage = "[-s] <old name> <new name>",
 DOVEADM_CMD_PARAMS_START
 DOVEADM_CMD_MAIL_COMMON
-DOVEADM_CMD_PARAM("s", "subscriptions", CMD_PARAM_BOOL, 0)
-DOVEADM_CMD_PARAM(":", "old", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
-DOVEADM_CMD_PARAM(":", "new", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('s', "subscriptions", CMD_PARAM_BOOL, 0)
+DOVEADM_CMD_PARAM('\0', "old", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('\0', "new", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
 DOVEADM_CMD_PARAMS_END
 };
 
@@ -610,7 +610,7 @@
 	.usage = "<mailbox> [...]",
 DOVEADM_CMD_PARAMS_START
 DOVEADM_CMD_MAIL_COMMON
-DOVEADM_CMD_PARAM(":", "mailbox", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('\0', "mailbox", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
 DOVEADM_CMD_PARAMS_END
 };
 
@@ -620,6 +620,6 @@
 	.usage = "<mailbox> [...]",
 DOVEADM_CMD_PARAMS_START
 DOVEADM_CMD_MAIL_COMMON
-DOVEADM_CMD_PARAM(":", "mailbox", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('\0', "mailbox", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
 DOVEADM_CMD_PARAMS_END
 };
--- a/src/doveadm/doveadm-mail.c	Fri Feb 19 16:34:53 2016 +0200
+++ b/src/doveadm/doveadm-mail.c	Fri Feb 19 16:36:00 2016 +0200
@@ -919,10 +919,9 @@
 			ctx->service_flags |= MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP;
 			wildcard_user = "*";
 			ctx->users_list_input = argv[i].value.v_istream;
-		} else if (ctx->v.parse_arg != NULL && argv[i].opt != NULL &&
-			   *(argv[i]).opt != '?' && *(argv[i]).opt != ':') {
+		} else if (ctx->v.parse_arg != NULL && argv[i].short_opt != '\0') {
 			optarg = (char*)argv[i].value.v_string;
-			ctx->v.parse_arg(ctx, *(argv[i].opt));
+			ctx->v.parse_arg(ctx, argv[i].short_opt);
 		} else if ((argv[i].flags & CMD_PARAM_FLAG_POSITIONAL) != 0) {
 			/* feed this into pargv */
 			if (argv[i].type == CMD_PARAM_ARRAY)
--- a/src/doveadm/doveadm-mail.h	Fri Feb 19 16:34:53 2016 +0200
+++ b/src/doveadm/doveadm-mail.h	Fri Feb 19 16:36:00 2016 +0200
@@ -197,9 +197,9 @@
 extern struct doveadm_cmd_ver2 doveadm_cmd_mailbox_unsubscribe_ver2;
 
 #define DOVEADM_CMD_MAIL_COMMON \
-DOVEADM_CMD_PARAM("A", "all-users", CMD_PARAM_BOOL, 0) \
-DOVEADM_CMD_PARAM("S:", "socket-path", CMD_PARAM_STR, 0) \
-DOVEADM_CMD_PARAM("u:", "user", CMD_PARAM_STR, 0) \
-DOVEADM_CMD_PARAM("F:", "user-file", CMD_PARAM_ISTREAM, 0)
+DOVEADM_CMD_PARAM('A', "all-users", CMD_PARAM_BOOL, 0) \
+DOVEADM_CMD_PARAM('S', "socket-path", CMD_PARAM_STR, 0) \
+DOVEADM_CMD_PARAM('u', "user", CMD_PARAM_STR, 0) \
+DOVEADM_CMD_PARAM('F', "user-file", CMD_PARAM_ISTREAM, 0)
 
 #endif