#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;
        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"
        );
 }
 
        { NULL, 0, NULL, 0 }
 };
 
-static int parse_options(int argc, char *argv[])
+static void parse_options(int argc, char *argv[])
 {
        int c;
 
                        user_csv = optarg;
                        break;
                case 'h':
-                       usage();
-                       exit(1);
-                       break;
+                       usage(EXIT_SUCCESS);
                case 'l':
                        /* main leaf */
                        user_index = strtoul(optarg, NULL, 0);
                        user_sub = strtoul(optarg, NULL, 0);
                        break;
                default:
-                       warnx("Invalid option '%c'", optopt);
-                       return -1;
-       }
-
-       return 0;
+                       usage(EXIT_FAILURE);
+               }
 }
 
 /*
  */
 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();