xentrace: adjust exit code for --help option

Invoking the --help option of any tool should not return with an error,
if that tool does have a documented and implemented help option.

Adjust the usage() function to exit with either error or success.
Handle the existing entry in the option table to call usage accordingly.

Adjust the getopt value for help. The char '?' is returned for unknown
options. Returning 'h' instead of '?' allows to handle --help.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: George Dunlap <george.dunlap@cloud.com>
This commit is contained in:
Olaf Hering authored and George Dunlap committed 2023-07-28 21:51:27 +01:00
1 parent 58275ab169
commit a40c3aa126
1 file changed
+12 -8
+12 -8
View File
@@ -807,7 +807,7 @@ static void monitor_tbufs(void)
const char *program_version = "xentrace v1.2";
const char *program_bug_address = "<mark.a.williamson@intel.com>";
static void usage(void)
static void usage(int status)
{
#define USAGE_STR \
"Usage: xentrace [OPTION...] [output file]\n" \
@@ -854,7 +854,7 @@ static void usage(void)
printf(USAGE_STR);
printf("\nReport bugs to %s\n", program_bug_address);
exit(EXIT_FAILURE);
exit(status);
}
/* convert the argument string pointed to by arg to a long int representation,
@@ -873,7 +873,7 @@ long sargtol(const char *restrict arg, int base)
{
fprintf(stderr, "Invalid option argument: %s\n", arg);
fprintf(stderr, "Error: %s\n\n", strerror(errno));
usage();
usage(EXIT_FAILURE);
}
else if (endp == arg)
{
@@ -901,7 +901,7 @@ long sargtol(const char *restrict arg, int base)
invalid:
fprintf(stderr, "Invalid option argument: %s\n\n", arg);
usage();
usage(EXIT_FAILURE);
return 0; /* not actually reached */
}
@@ -917,10 +917,10 @@ static long argtol(const char *restrict arg, int base)
if (errno != 0) {
fprintf(stderr, "Invalid option argument: %s\n", arg);
fprintf(stderr, "Error: %s\n\n", strerror(errno));
usage();
usage(EXIT_FAILURE);
} else if (endp == arg || *endp != '\0') {
fprintf(stderr, "Invalid option argument: %s\n\n", arg);
usage();
usage(EXIT_FAILURE);
}
return val;
@@ -1090,7 +1090,7 @@ static void parse_args(int argc, char **argv)
{ "discard-buffers", no_argument, 0, 'D' },
{ "dont-disable-tracing", no_argument, 0, 'x' },
{ "start-disabled", no_argument, 0, 'X' },
{ "help", no_argument, 0, '?' },
{ "help", no_argument, 0, 'h' },
{ "version", no_argument, 0, 'V' },
{ 0, 0, 0, 0 }
};
@@ -1144,8 +1144,12 @@ static void parse_args(int argc, char **argv)
opts.memory_buffer = sargtol(optarg, 0);
break;
case 'h':
usage(EXIT_SUCCESS);
break;
default:
usage();
usage(EXIT_FAILURE);
}
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.