]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
tools/x86/kcpuid: Simplify usage() handling
authorAhmed S. Darwish <darwi@linutronix.de>
Mon, 24 Mar 2025 14:20:24 +0000 (15:20 +0100)
committerIngo Molnar <mingo@kernel.org>
Tue, 25 Mar 2025 08:53:44 +0000 (09:53 +0100)
Refactor usage() to accept an exit code parameter and exit the program
after usage output.  This streamlines its callers' code paths.

Remove the "Invalid option" error message since getopt_long(3) already
emits a similar message by default.

Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Link: https://lore.kernel.org/r/20250324142042.29010-4-darwi@linutronix.de
tools/arch/x86/kcpuid/kcpuid.c

index 25b10feeb7209373c1e2edf435b2a645b5f3c46b..a90ac0b898a1671edf3d5e092f86523601087b3a 100644 (file)
@@ -10,6 +10,7 @@
 
 #define ARRAY_SIZE(x)  (sizeof(x) / sizeof((x)[0]))
 #define min(a, b)      (((a) < (b)) ? (a) : (b))
+#define __noreturn     __attribute__((__noreturn__))
 
 typedef unsigned int u32;
 typedef unsigned long long u64;
@@ -584,17 +585,17 @@ static void setup_platform_cpuid(void)
        leafs_ext = setup_cpuid_range(0x80000000);
 }
 
-static void usage(void)
+static void __noreturn usage(int exit_code)
 {
-       warnx("kcpuid [-abdfhr] [-l leaf] [-s subleaf]\n"
-             "\t-a|--all             Show both bit flags and complex bit fields info\n"
-             "\t-b|--bitflags        Show boolean flags only\n"
-             "\t-d|--detail          Show details of the flag/fields (default)\n"
-             "\t-f|--flags           Specify the CPUID CSV file\n"
-             "\t-h|--help            Show usage info\n"
-             "\t-l|--leaf=index      Specify the leaf you want to check\n"
-             "\t-r|--raw             Show raw CPUID data\n"
-             "\t-s|--subleaf=sub     Specify the subleaf you want to check"
+       errx(exit_code, "kcpuid [-abdfhr] [-l leaf] [-s subleaf]\n"
+            "\t-a|--all             Show both bit flags and complex bit fields info\n"
+            "\t-b|--bitflags        Show boolean flags only\n"
+            "\t-d|--detail          Show details of the flag/fields (default)\n"
+            "\t-f|--flags           Specify the CPUID CSV file\n"
+            "\t-h|--help            Show usage info\n"
+            "\t-l|--leaf=index      Specify the leaf you want to check\n"
+            "\t-r|--raw             Show raw CPUID data\n"
+            "\t-s|--subleaf=sub     Specify the subleaf you want to check"
        );
 }
 
@@ -610,7 +611,7 @@ static struct option opts[] = {
        { NULL, 0, NULL, 0 }
 };
 
-static int parse_options(int argc, char *argv[])
+static void parse_options(int argc, char *argv[])
 {
        int c;
 
@@ -630,9 +631,7 @@ static int parse_options(int argc, char *argv[])
                        user_csv = optarg;
                        break;
                case 'h':
-                       usage();
-                       exit(1);
-                       break;
+                       usage(EXIT_SUCCESS);
                case 'l':
                        /* main leaf */
                        user_index = strtoul(optarg, NULL, 0);
@@ -645,11 +644,8 @@ static int parse_options(int argc, char *argv[])
                        user_sub = strtoul(optarg, NULL, 0);
                        break;
                default:
-                       warnx("Invalid option '%c'", optopt);
-                       return -1;
-       }
-
-       return 0;
+                       usage(EXIT_FAILURE);
+               }
 }
 
 /*
@@ -662,8 +658,7 @@ static int parse_options(int argc, char *argv[])
  */
 int main(int argc, char *argv[])
 {
-       if (parse_options(argc, argv))
-               return -1;
+       parse_options(argc, argv);
 
        /* Setup the cpuid leafs of current platform */
        setup_platform_cpuid();