@@ -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;
}
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@ozlabs.org> --- src/main.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-)