[pacman-dev] [PATCH] Use non-ascii identifiers for overloaded optflags

Dave Reisner dreisner at archlinux.org
Thu Feb 21 13:42:20 EST 2013


This prevents "non-sensical" combinations of flags from being
misinterpreted, such as:

  $ pacman -Si --changelog $package
    --changelog is -c, meaning --clean for -S

  $ pacman -Q --sysupgrade
    --sysupgrade is -u, meaning --upgrades for -Q

Signed-off-by: Dave Reisner <dreisner at archlinux.org>
---
 src/pacman/conf.h   | 16 ++++++++++++++-
 src/pacman/pacman.c | 56 ++++++++++++++++++++++++++---------------------------
 2 files changed, 43 insertions(+), 29 deletions(-)

diff --git a/src/pacman/conf.h b/src/pacman/conf.h
index d85d11f..c1fd499 100644
--- a/src/pacman/conf.h
+++ b/src/pacman/conf.h
@@ -129,7 +129,21 @@ enum {
 	OP_PRINTFORMAT,
 	OP_GPGDIR,
 	OP_DBONLY,
-	OP_FORCE
+	OP_FORCE,
+	OP_CASCADE,
+	OP_CHANGELOG,
+	OP_CLEAN,
+	OP_NODEPS,
+	OP_DEPS,
+	OP_NATIVE,
+	OP_NOSAVE,
+	OP_FILE,
+	OP_PRINT,
+	OP_RECURSIVE,
+	OP_SEARCH,
+	OP_UPGRADES,
+	OP_SYSUPGRADE,
+	OP_UNNEEDED
 };
 
 /* clean method */
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 38b28e1..513243a 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -456,21 +456,21 @@ static int parsearg_database(int opt)
 static int parsearg_query(int opt)
 {
 	switch(opt) {
-		case 'c': config->op_q_changelog = 1; break;
-		case 'd': config->op_q_deps = 1; break;
+		case OP_CHANGELOG: config->op_q_changelog = 1; break;
+		case OP_DEPS: config->op_q_deps = 1; break;
 		case 'e': config->op_q_explicit = 1; break;
 		case 'g': (config->group)++; break;
 		case 'i': (config->op_q_info)++; break;
 		case 'k': (config->op_q_check)++; break;
 		case 'l': config->op_q_list = 1; break;
 		case 'm': config->op_q_locality |= PKG_LOCALITY_LOCAL; break;
-		case 'n': config->op_q_locality |= PKG_LOCALITY_FOREIGN; break;
+		case OP_NATIVE: config->op_q_locality |= PKG_LOCALITY_FOREIGN; break;
 		case 'o': config->op_q_owns = 1; break;
-		case 'p': config->op_q_isfile = 1; break;
+		case OP_FILE: config->op_q_isfile = 1; break;
 		case 'q': config->quiet = 1; break;
-		case 's': config->op_q_search = 1; break;
+		case OP_SEARCH: config->op_q_search = 1; break;
 		case 't': config->op_q_unrequired = 1; break;
-		case 'u': config->op_q_upgrade = 1; break;
+		case OP_UPGRADES: config->op_q_upgrade = 1; break;
 		default: return 1;
 	}
 	return 0;
@@ -480,7 +480,7 @@ static int parsearg_query(int opt)
 static int parsearg_trans(int opt)
 {
 	switch(opt) {
-		case 'd':
+		case OP_NODEPS:
 			if(config->flags & ALPM_TRANS_FLAG_NODEPVERSION) {
 				config->flags |= ALPM_TRANS_FLAG_NODEPS;
 			} else {
@@ -490,7 +490,7 @@ static int parsearg_trans(int opt)
 		case OP_DBONLY: config->flags |= ALPM_TRANS_FLAG_DBONLY; break;
 		case OP_NOPROGRESSBAR: config->noprogressbar = 1; break;
 		case OP_NOSCRIPTLET: config->flags |= ALPM_TRANS_FLAG_NOSCRIPTLET; break;
-		case 'p': config->print = 1; break;
+		case OP_PRINT: config->print = 1; break;
 		case OP_PRINTFORMAT:
 			check_optarg();
 			config->print_format = strdup(optarg);
@@ -505,16 +505,16 @@ static int parsearg_remove(int opt)
 	if(parsearg_trans(opt) == 0)
 		return 0;
 	switch(opt) {
-		case 'c': config->flags |= ALPM_TRANS_FLAG_CASCADE; break;
-		case 'n': config->flags |= ALPM_TRANS_FLAG_NOSAVE; break;
-		case 's':
+		case OP_CASCADE: config->flags |= ALPM_TRANS_FLAG_CASCADE; break;
+		case OP_NOSAVE: config->flags |= ALPM_TRANS_FLAG_NOSAVE; break;
+		case OP_RECURSIVE:
 			if(config->flags & ALPM_TRANS_FLAG_RECURSE) {
 				config->flags |= ALPM_TRANS_FLAG_RECURSEALL;
 			} else {
 				config->flags |= ALPM_TRANS_FLAG_RECURSE;
 			}
 			break;
-		case 'u': config->flags |= ALPM_TRANS_FLAG_UNNEEDED; break;
+		case OP_UNNEEDED: config->flags |= ALPM_TRANS_FLAG_UNNEEDED; break;
 		default: return 1;
 	}
 	return 0;
@@ -546,13 +546,13 @@ static int parsearg_sync(int opt)
 	if(parsearg_upgrade(opt) == 0)
 		return 0;
 	switch(opt) {
-		case 'c': (config->op_s_clean)++; break;
+		case OP_CLEAN: (config->op_s_clean)++; break;
 		case 'g': (config->group)++; break;
 		case 'i': (config->op_s_info)++; break;
 		case 'l': config->op_q_list = 1; break;
 		case 'q': config->quiet = 1; break;
 		case 's': config->op_s_search = 1; break;
-		case 'u': (config->op_s_upgrade)++; break;
+		case OP_SYSUPGRADE: (config->op_s_upgrade)++; break;
 		case 'w':
 			config->op_s_downloadonly = 1;
 			config->flags |= ALPM_TRANS_FLAG_DOWNLOADONLY;
@@ -585,11 +585,11 @@ static int parseargs(int argc, char *argv[])
 		{"upgrade",    no_argument,       0, 'U'},
 		{"version",    no_argument,       0, 'V'},
 		{"dbpath",     required_argument, 0, 'b'},
-		{"cascade",    no_argument,       0, 'c'},
-		{"changelog",  no_argument,       0, 'c'},
-		{"clean",      no_argument,       0, 'c'},
-		{"nodeps",     no_argument,       0, 'd'},
-		{"deps",       no_argument,       0, 'd'},
+		{"cascade",    no_argument,       0, OP_CASCADE},
+		{"changelog",  no_argument,       0, OP_CHANGELOG},
+		{"clean",      no_argument,       0, OP_CLEAN},
+		{"nodeps",     no_argument,       0, OP_NODEPS},
+		{"deps",       no_argument,       0, OP_DEPS},
 		{"explicit",   no_argument,       0, 'e'},
 		{"groups",     no_argument,       0, 'g'},
 		{"help",       no_argument,       0, 'h'},
@@ -597,19 +597,19 @@ static int parseargs(int argc, char *argv[])
 		{"check",      no_argument,       0, 'k'},
 		{"list",       no_argument,       0, 'l'},
 		{"foreign",    no_argument,       0, 'm'},
-		{"native",     no_argument,       0, 'n'},
-		{"nosave",     no_argument,       0, 'n'},
+		{"native",     no_argument,       0, OP_NATIVE},
+		{"nosave",     no_argument,       0, OP_NOSAVE},
 		{"owns",       no_argument,       0, 'o'},
-		{"file",       no_argument,       0, 'p'},
-		{"print",      no_argument,       0, 'p'},
+		{"file",       no_argument,       0, OP_FILE},
+		{"print",      no_argument,       0, OP_PRINT},
 		{"quiet",      no_argument,       0, 'q'},
 		{"root",       required_argument, 0, 'r'},
-		{"recursive",  no_argument,       0, 's'},
-		{"search",     no_argument,       0, 's'},
+		{"recursive",  no_argument,       0, OP_RECURSIVE},
+		{"search",     no_argument,       0, OP_SEARCH},
 		{"unrequired", no_argument,       0, 't'},
-		{"upgrades",   no_argument,       0, 'u'},
-		{"sysupgrade", no_argument,       0, 'u'},
-		{"unneeded",   no_argument,       0, 'u'},
+		{"upgrades",   no_argument,       0, OP_UPGRADES},
+		{"sysupgrade", no_argument,       0, OP_SYSUPGRADE},
+		{"unneeded",   no_argument,       0, OP_UNNEEDED},
 		{"verbose",    no_argument,       0, 'v'},
 		{"downloadonly", no_argument,     0, 'w'},
 		{"refresh",    no_argument,       0, 'y'},
-- 
1.8.1.4



More information about the pacman-dev mailing list