d72f5af
From da4dd38a7216f6794886b9e8c310273869fcb324 Mon Sep 17 00:00:00 2001
d72f5af
From: Ryan O'Hara <rohara@redhat.com>
d72f5af
Date: Tue, 30 Oct 2012 10:42:26 -0500
d72f5af
Subject: [PATCH 02/10] Remove duplicate command-line option code
d72f5af
d72f5af
This patch removes unnecessary code to process command-line
d72f5af
options. All options can be processed with a single while loop that
d72f5af
calls poptGetNextOpt. This patch also adds code to check for errors
d72f5af
while processing options. Note that errors encountered while
d72f5af
processing command-line options are fatal.
d72f5af
d72f5af
Signed-off-by: Ryan O'Hara <rohara@redhat.com>
d72f5af
---
d72f5af
 keepalived/core/main.c |   83 +++++++++--------------------------------------
d72f5af
 1 files changed, 16 insertions(+), 67 deletions(-)
d72f5af
d72f5af
diff --git a/keepalived/core/main.c b/keepalived/core/main.c
d72f5af
index 9445a4c..ef4bbb9 100644
d72f5af
--- a/keepalived/core/main.c
d72f5af
+++ b/keepalived/core/main.c
d72f5af
@@ -200,75 +200,18 @@ parse_cmdline(int argc, char **argv)
d72f5af
 		{NULL, 0, 0, NULL, 0}
d72f5af
 	};
d72f5af
 
d72f5af
-	context =
d72f5af
-	    poptGetContext(PROG, argc, (const char **) argv, options_table, 0);
d72f5af
-	if ((c = poptGetNextOpt(context)) < 0) {
d72f5af
-		return;
d72f5af
-	}
d72f5af
-
d72f5af
-	/* The first option car */
d72f5af
-	switch (c) {
d72f5af
-	case 'v':
d72f5af
-		fprintf(stderr, VERSION_STRING);
d72f5af
-		exit(0);
d72f5af
-		break;
d72f5af
-	case 'h':
d72f5af
-		usage(argv[0]);
d72f5af
-		exit(0);
d72f5af
-		break;
d72f5af
-	case 'l':
d72f5af
-		debug |= 1;
d72f5af
-		break;
d72f5af
-	case 'n':
d72f5af
-		debug |= 2;
d72f5af
-		break;
d72f5af
-	case 'd':
d72f5af
-		debug |= 4;
d72f5af
-		break;
d72f5af
-	case 'V':
d72f5af
-		debug |= 8;
d72f5af
-		break;
d72f5af
-	case 'I':
d72f5af
-		debug |= 16;
d72f5af
-		break;
d72f5af
-	case 'D':
d72f5af
-		debug |= 32;
d72f5af
-		break;
d72f5af
-	case 'R':
d72f5af
-		debug |= 64;
d72f5af
-		break;
d72f5af
-	case 'S':
d72f5af
-		log_facility = LOG_FACILITY[atoi(option_arg)].facility;
d72f5af
-		break;
d72f5af
-	case 'f':
d72f5af
-		conf_file = option_arg;
d72f5af
-		break;
d72f5af
-	case 'P':
d72f5af
-		daemon_mode |= 1;
d72f5af
-		break;
d72f5af
-	case 'C':
d72f5af
-		daemon_mode |= 2;
d72f5af
-		break;
d72f5af
-	case 'p':
d72f5af
-		main_pidfile = option_arg;
d72f5af
-		break;
d72f5af
-	case 'c':
d72f5af
-		checkers_pidfile = option_arg;
d72f5af
-		break;
d72f5af
-	case 'r':
d72f5af
-		vrrp_pidfile = option_arg;
d72f5af
-		break;
d72f5af
-#ifdef _WITH_SNMP_
d72f5af
-	case 'x':
d72f5af
-		snmp = 1;
d72f5af
-		break;
d72f5af
-#endif
d72f5af
-	}
d72f5af
+	context = poptGetContext(PROG, argc, (const char **) argv, options_table, 0);
d72f5af
 
d72f5af
-	/* the others */
d72f5af
-	/* fixme: why is this duplicated? */
d72f5af
 	while ((c = poptGetNextOpt(context)) >= 0) {
d72f5af
 		switch (c) {
d72f5af
+		case 'v':
d72f5af
+			fprintf(stderr, VERSION_STRING);
d72f5af
+			exit(0);
d72f5af
+			break;
d72f5af
+		case 'h':
d72f5af
+			usage(argv[0]);
d72f5af
+			exit(0);
d72f5af
+			break;
d72f5af
 		case 'l':
d72f5af
 			debug |= 1;
d72f5af
 			break;
d72f5af
@@ -319,10 +262,16 @@ parse_cmdline(int argc, char **argv)
d72f5af
 		}
d72f5af
 	}
d72f5af
 
d72f5af
+	if (c < -1) {
d72f5af
+		fprintf(stderr, "%s '%s'\n", poptStrerror(c),
d72f5af
+			poptBadOption(context, POPT_BADOPTION_NOALIAS));
d72f5af
+		poptFreeContext(context);
d72f5af
+		exit(1);
d72f5af
+	}
d72f5af
+
d72f5af
 	/* check unexpected arguments */
d72f5af
 	if ((option_arg = (char *) poptGetArg(context))) {
d72f5af
 		fprintf(stderr, "unexpected argument %s\n", option_arg);
d72f5af
-		return;
d72f5af
 	}
d72f5af
 
d72f5af
 	/* free the allocated context */
d72f5af
-- 
d72f5af
1.7.1
d72f5af