From c54660b41b21bcbf98148f3795b6416be63ad6e1 Mon Sep 17 00:00:00 2001 From: Kang Minchul Date: Sun, 30 Jun 2024 00:52:00 +0900 Subject: [PATCH] misc: Add -h/--help options and end marker to demangler_options This commit adds support for the -h and --help options to display usage of misc/demangler like follows. $ misc/demangler -h demangler v0.11-683-g804a OPTION: --simple Use internal simple demangler (default) --full Use libstdc++ demangler --no Do not use demangler -v, --verbose Be verbose -h, --help Display this help and exit An end marker has also been added to the demangler_options array for proper termination and prevent potential undefined behavior. Fixed: #1939 Signed-off-by: Kang Minchul --- misc/demangler.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/misc/demangler.c b/misc/demangler.c index 537aaee34..114c72f2b 100644 --- a/misc/demangler.c +++ b/misc/demangler.c @@ -18,10 +18,9 @@ enum options { }; static struct option demangler_options[] = { - { "simple", no_argument, 0, OPT_simple }, - { "full", no_argument, 0, OPT_full }, - { "no", no_argument, 0, OPT_no }, - { "verbose", no_argument, 0, 'v' }, + { "simple", no_argument, 0, OPT_simple }, { "full", no_argument, 0, OPT_full }, + { "no", no_argument, 0, OPT_no }, { "verbose", no_argument, 0, 'v' }, + { "help", no_argument, 0, 'h' }, { 0 } }; static const char demangler_usage[] = @@ -32,6 +31,7 @@ static const char demangler_usage[] = " --full Use libstdc++ demangler\n" " --no Do not use demangler\n" " -v, --verbose Be verbose\n" + " -h, --help Display this help and exit\n" "\n"; struct demangler_opts { @@ -46,7 +46,7 @@ static void parse_option(int argc, char **argv, struct demangler_opts *opts) while (!done) { int key, tmp; - key = getopt_long(argc, argv, "v", demangler_options, &tmp); + key = getopt_long(argc, argv, "vh", demangler_options, &tmp); switch (key) { case OPT_simple: opts->mode = DEMANGLE_SIMPLE; @@ -65,6 +65,10 @@ static void parse_option(int argc, char **argv, struct demangler_opts *opts) dbg_domain[DBG_DEMANGLE]++; break; + case 'h': + printf("%s", demangler_usage); + exit(0); + case -1: done = true; break;