[Pdbg] [PATCH v3 10/11] main: Print specific errors for invalid arguments

Amitay Isaacs amitay at ozlabs.org
Thu May 24 15:50:16 AEST 2018


This avoids the large usage message obscuring the actual errors from
parsing options.  Print usage only if an option is invalid.

Signed-off-by: Amitay Isaacs <amitay at ozlabs.org>
---
 src/main.c | 31 +++++++++++++++----------------
 1 file changed, 15 insertions(+), 16 deletions(-)

diff --git a/src/main.c b/src/main.c
index 1a01bf1..0bc6c88 100644
--- a/src/main.c
+++ b/src/main.c
@@ -243,7 +243,7 @@ static bool parse_list(const char *arg, int max, int *list, int *count)
 static bool parse_options(int argc, char *argv[])
 {
 	int c;
-	bool opt_error = true;
+	bool opt_error = false;
 	int p_list[MAX_PROCESSORS];
 	int c_list[MAX_CHIPS];
 	int t_list[MAX_THREADS];
@@ -273,8 +273,6 @@ static bool parse_options(int argc, char *argv[])
 
 		switch(c) {
 		case 'a':
-			opt_error = false;
-
 			if (p_count == 0) {
 				p_count = MAX_PROCESSORS;
 				for (i=0; i<MAX_PROCESSORS; i++)
@@ -295,28 +293,27 @@ static bool parse_options(int argc, char *argv[])
 			break;
 
 		case 'p':
-			if (!parse_list(optarg, MAX_PROCESSORS, p_list, &p_count))
+			if (!parse_list(optarg, MAX_PROCESSORS, p_list, &p_count)) {
 				fprintf(stderr, "Failed to parse '-p %s'\n", optarg);
-			else
-				opt_error = false;
+				opt_error = true;
+			}
 			break;
 
 		case 'c':
-			if (!parse_list(optarg, MAX_CHIPS, c_list, &c_count))
+			if (!parse_list(optarg, MAX_CHIPS, c_list, &c_count)) {
 				fprintf(stderr, "Failed to parse '-c %s'\n", optarg);
-			else
-				opt_error = false;
+				opt_error = true;
+			}
 			break;
 
 		case 't':
-			if (!parse_list(optarg, MAX_THREADS, t_list, &t_count))
+			if (!parse_list(optarg, MAX_THREADS, t_list, &t_count)) {
 				fprintf(stderr, "Failed to parse '-t %s'\n", optarg);
-			else
 				opt_error = false;
+			}
 			break;
 
 		case 'b':
-			opt_error = false;
 			if (strcmp(optarg, "fsi") == 0) {
 				backend = FSI;
 				device_node = "p9w";
@@ -330,12 +327,13 @@ static bool parse_options(int argc, char *argv[])
 				backend = FAKE;
 			} else if (strcmp(optarg, "host") == 0) {
 				backend = HOST;
-			} else
+			} else {
+				fprintf(stderr, "Invalid backend '%s'\n", optarg);
 				opt_error = true;
+			}
 			break;
 
 		case 'd':
-			opt_error = false;
 			device_node = optarg;
 			break;
 
@@ -343,6 +341,8 @@ static bool parse_options(int argc, char *argv[])
 			errno = 0;
 			i2c_addr = strtoull(optarg, &endptr, 0);
 			opt_error = (errno || *endptr != '\0');
+			if (opt_error)
+				fprintf(stderr, "Invalid slave address '%s'\n", optarg);
 			break;
 
 		case 'D':
@@ -355,19 +355,18 @@ static bool parse_options(int argc, char *argv[])
 			break;
 
 		case 'E':
-			opt_error = false;
 			pdbg_expert_mode = true;
 			break;
 
 		case '?':
 		case 'h':
 			opt_error = true;
+			print_usage(argv[0]);
 			break;
 		}
 	} while (c != EOF && !opt_error);
 
 	if (opt_error) {
-		print_usage(argv[0]);
 		return false;
 	}
 
-- 
2.17.0



More information about the Pdbg mailing list