These function have probably been added in 'historical order' and
as result it's not easy to quickly see where they're defined.
Change this arranging them in asciibetical order.
Signed-off-by: Luc Van Oostenryck <[email protected]>
---
lib.c | 656 +++++++++++++++++++++++++++++-----------------------------
1 file changed, 327 insertions(+), 329 deletions(-)
diff --git a/lib.c b/lib.c
index 4868154fa3de..5f4e6b2d76c8 100644
--- a/lib.c
+++ b/lib.c
@@ -568,6 +568,14 @@ OPT_NUMERIC(uint, unsigned int, strtoul)
////////////////////////////////////////////////////////////////////////////////
// Option parsing
+static char **handle_switch_a(char *arg, char **next)
+{
+ if (!strcmp (arg, "ansi"))
+ standard = STANDARD_C89;
+
+ return next;
+}
+
static char **handle_switch_D(char *arg, char **next)
{
const char *name = arg + 1;
@@ -595,6 +603,37 @@ static char **handle_switch_D(char *arg, char **next)
return next;
}
+static char **handle_switch_d(char *arg, char **next)
+{
+ char *arg_char = arg + 1;
+
+ /*
+ * -d<CHARS>, where <CHARS> is a sequence of characters, not preceded
+ * by a space. If you specify characters whose behaviour conflicts,
+ * the result is undefined.
+ */
+ while (*arg_char) {
+ switch (*arg_char) {
+ case 'M': /* dump just the macro definitions */
+ dump_macros_only = 1;
+ dump_macro_defs = 0;
+ break;
+ case 'D': /* like 'M', but also output pre-processed text */
+ dump_macro_defs = 1;
+ dump_macros_only = 0;
+ break;
+ case 'N': /* like 'D', but only output macro names not bodies */
+ break;
+ case 'I': /* like 'D', but also output #include directives */
+ break;
+ case 'U': /* like 'D', but only output expanded macros */
+ break;
+ }
+ arg_char++;
+ }
+ return next;
+}
+
static char **handle_switch_E(char *arg, char **next)
{
if (arg[1] == '\0')
@@ -602,6 +641,146 @@ static char **handle_switch_E(char *arg, char **next)
return next;
}
+static int handle_ftabstop(const char *arg, const char *opt, const struct flag *flag, int options)
+{
+ unsigned long val;
+ char *end;
+
+ if (*opt == '\0')
+ die("error: missing argument to \"%s\"", arg);
+
+ /* we silently ignore silly values */
+ val = strtoul(opt, &end, 10);
+ if (*end == '\0' && 1 <= val && val <= 100)
+ tabstop = val;
+
+ return 1;
+}
+
+static int handle_fpasses(const char *arg, const char *opt, const struct flag *flag, int options)
+{
+ unsigned long mask;
+
+ mask = flag->mask;
+ if (*opt == '\0') {
+ if (options & OPT_INVERSE)
+ fpasses &= ~mask;
+ else
+ fpasses |= mask;
+ return 1;
+ }
+ if (options & OPT_INVERSE)
+ return 0;
+ if (!strcmp(opt, "-enable")) {
+ fpasses |= mask;
+ return 1;
+ }
+ if (!strcmp(opt, "-disable")) {
+ fpasses &= ~mask;
+ return 1;
+ }
+ if (!strcmp(opt, "=last")) {
+ // clear everything above
+ mask |= mask - 1;
+ fpasses &= mask;
+ return 1;
+ }
+ return 0;
+}
+
+static int handle_fdiagnostic_prefix(const char *arg, const char *opt, const struct flag *flag, int options)
+{
+ switch (*opt) {
+ case '\0':
+ diag_prefix = "sparse: ";
+ return 1;
+ case '=':
+ diag_prefix = xasprintf("%s: ", opt+1);
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+static int handle_fdump_ir(const char *arg, const char *opt, const struct flag *flag, int options)
+{
+ static const struct mask_map dump_ir_options[] = {
+ { "", PASS_LINEARIZE },
+ { "linearize", PASS_LINEARIZE },
+ { "mem2reg", PASS_MEM2REG },
+ { "final", PASS_FINAL },
+ { },
+ };
+
+ return handle_suboption_mask(arg, opt, dump_ir_options, &fdump_ir);
+}
+
+static int handle_fmemcpy_max_count(const char *arg, const char *opt, const struct flag *flag, int options)
+{
+ opt_ullong(arg, opt, &fmemcpy_max_count, OPTNUM_ZERO_IS_INF|OPTNUM_UNLIMITED);
+ return 1;
+}
+
+static int handle_fmax_warnings(const char *arg, const char *opt, const struct flag *flag, int options)
+{
+ opt_uint(arg, opt, &fmax_warnings, OPTNUM_UNLIMITED);
+ return 1;
+}
+
+static struct flag fflags[] = {
+ { "diagnostic-prefix", NULL, handle_fdiagnostic_prefix },
+ { "dump-ir", NULL, handle_fdump_ir },
+ { "freestanding", &fhosted, NULL, OPT_INVERSE },
+ { "hosted", &fhosted },
+ { "linearize", NULL, handle_fpasses, PASS_LINEARIZE },
+ { "max-warnings=", NULL, handle_fmax_warnings },
+ { "mem-report", &fmem_report },
+ { "memcpy-max-count=", NULL, handle_fmemcpy_max_count },
+ { "tabstop=", NULL, handle_ftabstop },
+ { "mem2reg", NULL, handle_fpasses, PASS_MEM2REG },
+ { "optim", NULL, handle_fpasses, PASS_OPTIM },
+ { "pic", &fpic, handle_switch_setval, 1 },
+ { "PIC", &fpic, handle_switch_setval, 2 },
+ { "pie", &fpie, handle_switch_setval, 1 },
+ { "PIE", &fpie, handle_switch_setval, 2 },
+ { "signed-char", &funsigned_char, NULL, OPT_INVERSE },
+ { "short-wchar", &fshort_wchar },
+ { "unsigned-char", &funsigned_char, NULL, },
+ { },
+};
+
+static char **handle_switch_f(char *arg, char **next)
+{
+ if (handle_switches(arg-1, arg+1, fflags))
+ return next;
+
+ return next;
+}
+
+static char **handle_switch_G(char *arg, char **next)
+{
+ if (!strcmp (arg, "G") && *next)
+ return next + 1; // "-G 0"
+ else
+ return next; // "-G0" or (bogus) terminal "-G"
+}
+
+static char **handle_base_dir(char *arg, char **next)
+{
+ gcc_base_dir = *++next;
+ if (!gcc_base_dir)
+ die("missing argument for -gcc-base-dir option");
+ return next;
+}
+
+static char **handle_switch_g(char *arg, char **next)
+{
+ if (!strcmp (arg, "gcc-base-dir"))
+ return handle_base_dir(arg, next);
+
+ return next;
+}
+
static char **handle_switch_I(char *arg, char **next)
{
char *path = arg+1;
@@ -659,15 +838,7 @@ static char **handle_switch_M(char *arg, char **next)
return next;
}
-static char **handle_multiarch_dir(char *arg, char **next)
-{
- multiarch_dir = *++next;
- if (!multiarch_dir)
- die("missing argument for -multiarch-dir option");
- return next;
-}
-
-static int handle_cmodel(const char *opt, const char *arg, const struct flag *flag, int options)
+static int handle_mcmodel(const char *opt, const char *arg, const struct flag *flag, int options)
{
static const struct val_map cmodels[] = {
{ "kernel", CMODEL_KERNEL },
@@ -682,7 +853,7 @@ static int handle_cmodel(const char *opt, const char *arg, const struct flag *fl
return handle_subopt_val(opt, arg, cmodels, flag->flag);
}
-static int handle_float_abi(const char *opt, const char *arg, const struct flag *flag, int options) {
+static int handle_mfloat_abi(const char *opt, const char *arg, const struct flag *flag, int options) {
static const struct val_map fp_abis[] = {
{ "hard", FP_ABI_HARD },
{ "soft", FP_ABI_SOFT },
@@ -692,6 +863,14 @@ static int handle_float_abi(const char *opt, const char *arg, const struct flag
return handle_subopt_val(opt, arg, fp_abis, flag->flag);
}
+static char **handle_multiarch_dir(char *arg, char **next)
+{
+ multiarch_dir = *++next;
+ if (!multiarch_dir)
+ die("missing argument for -multiarch-dir option");
+ return next;
+}
+
static const struct flag mflags[] = {
{ "64", &arch_m64, NULL, OPT_VAL, ARCH_LP64 },
{ "32", &arch_m64, NULL, OPT_VAL, ARCH_LP32 },
@@ -702,8 +881,8 @@ static const struct flag mflags[] = {
{ "size-long", &arch_msize_long },
{ "big-endian", &arch_big_endian, NULL },
{ "little-endian", &arch_big_endian, NULL, OPT_INVERSE },
- { "cmodel", &arch_cmodel, handle_cmodel },
- { "float-abi", &arch_fp_abi, handle_float_abi },
+ { "cmodel", &arch_cmodel, handle_mcmodel },
+ { "float-abi", &arch_fp_abi, handle_mfloat_abi },
{ "hard-float", &arch_fp_abi, NULL, OPT_VAL, FP_ABI_HARD },
{ "soft-float", &arch_fp_abi, NULL, OPT_VAL, FP_ABI_SOFT },
{ }
@@ -720,6 +899,30 @@ static char **handle_switch_m(char *arg, char **next)
return next;
}
+static char **handle_nostdinc(char *arg, char **next)
+{
+ add_pre_buffer("#nostdinc\n");
+ return next;
+}
+
+static char **handle_switch_n(char *arg, char **next)
+{
+ if (!strcmp (arg, "nostdinc"))
+ return handle_nostdinc(arg, next);
+
+ return next;
+}
+
+static char **handle_switch_O(char *arg, char **next)
+{
+ int level = 1;
+ if (arg[1] >= '0' && arg[1] <= '9')
+ level = arg[1] - '0';
+ optimize_level = level;
+ optimize_size = arg[1] == 's';
+ return next;
+}
+
static char **handle_switch_o(char *arg, char **next)
{
if (!strcmp (arg, "o")) { // "-o foo"
@@ -743,304 +946,6 @@ static char **handle_switch_p(char *arg, char **next)
return next;
}
-static const struct flag warnings[] = {
- { "address", &Waddress },
- { "address-space", &Waddress_space },
- { "bitwise", &Wbitwise },
- { "bitwise-pointer", &Wbitwise_pointer},
- { "cast-from-as", &Wcast_from_as },
- { "cast-to-as", &Wcast_to_as },
- { "cast-truncate", &Wcast_truncate },
- { "constant-suffix", &Wconstant_suffix },
- { "constexpr-not-const", &Wconstexpr_not_const},
- { "context", &Wcontext },
- { "decl", &Wdecl },
- { "declaration-after-statement", &Wdeclarationafterstatement },
- { "default-bitfield-sign", &Wdefault_bitfield_sign },
- { "designated-init", &Wdesignated_init },
- { "do-while", &Wdo_while },
- { "enum-mismatch", &Wenum_mismatch },
- { "external-function-has-definition", &Wexternal_function_has_definition },
- { "implicit-int", &Wimplicit_int },
- { "init-cstring", &Winit_cstring },
- { "int-to-pointer-cast", &Wint_to_pointer_cast },
- { "memcpy-max-count", &Wmemcpy_max_count },
- { "non-pointer-null", &Wnon_pointer_null },
- { "newline-eof", &Wnewline_eof },
- { "old-initializer", &Wold_initializer },
- { "old-style-definition", &Wold_style_definition },
- { "one-bit-signed-bitfield", &Wone_bit_signed_bitfield },
- { "override-init", &Woverride_init },
- { "override-init-all", &Woverride_init_all },
- { "paren-string", &Wparen_string },
- { "pedantic", &Wpedantic },
- { "pointer-to-int-cast", &Wpointer_to_int_cast },
- { "ptr-subtraction-blows", &Wptr_subtraction_blows },
- { "return-void", &Wreturn_void },
- { "shadow", &Wshadow },
- { "shift-count-negative", &Wshift_count_negative },
- { "shift-count-overflow", &Wshift_count_overflow },
- { "sizeof-bool", &Wsizeof_bool },
- { "strict-prototypes", &Wstrict_prototypes },
- { "pointer-arith", &Wpointer_arith },
- { "sparse-error", &Wsparse_error },
- { "tautological-compare", &Wtautological_compare },
- { "transparent-union", &Wtransparent_union },
- { "typesign", &Wtypesign },
- { "undef", &Wundef },
- { "uninitialized", &Wuninitialized },
- { "universal-initializer", &Wuniversal_initializer },
- { "unknown-attribute", &Wunknown_attribute },
- { "vla", &Wvla },
- { }
-};
-
-static char **handle_switch_W(char *arg, char **next)
-{
- char ** ret = handle_onoff_switch(arg, next, warnings);
- if (ret)
- return ret;
-
- if (!strcmp(arg, "Wsparse-all")) {
- int i;
- for (i = 0; warnings[i].name; i++) {
- if (*warnings[i].flag != FLAG_FORCE_OFF)
- *warnings[i].flag = FLAG_ON;
- }
- }
-
- // Unknown.
- return next;
-}
-
-static struct flag debugs[] = {
- { "compound", &dbg_compound},
- { "dead", &dbg_dead},
- { "domtree", &dbg_domtree},
- { "entry", &dbg_entry},
- { "ir", &dbg_ir},
- { "postorder", &dbg_postorder},
- { }
-};
-
-
-static char **handle_switch_v(char *arg, char **next)
-{
- char ** ret = handle_onoff_switch(arg, next, debugs);
- if (ret)
- return ret;
-
- // Unknown.
- do {
- verbose++;
- } while (*++arg == 'v');
- return next;
-}
-
-static char **handle_switch_d(char *arg, char **next)
-{
- char *arg_char = arg + 1;
-
- /*
- * -d<CHARS>, where <CHARS> is a sequence of characters, not preceded
- * by a space. If you specify characters whose behaviour conflicts,
- * the result is undefined.
- */
- while (*arg_char) {
- switch (*arg_char) {
- case 'M': /* dump just the macro definitions */
- dump_macros_only = 1;
- dump_macro_defs = 0;
- break;
- case 'D': /* like 'M', but also output pre-processed text */
- dump_macro_defs = 1;
- dump_macros_only = 0;
- break;
- case 'N': /* like 'D', but only output macro names not bodies */
- break;
- case 'I': /* like 'D', but also output #include directives */
- break;
- case 'U': /* like 'D', but only output expanded macros */
- break;
- }
- arg_char++;
- }
- return next;
-}
-
-
-static void handle_switch_W_finalize(void)
-{
- handle_onoff_switch_finalize(warnings);
-
- /* default Wdeclarationafterstatement based on the C dialect */
- if (-1 == Wdeclarationafterstatement) {
- switch (standard) {
- case STANDARD_C89:
- case STANDARD_C94:
- Wdeclarationafterstatement = 1;
- break;
- default:
- Wdeclarationafterstatement = 0;
- break;
- }
- }
-}
-
-static void handle_switch_v_finalize(void)
-{
- handle_onoff_switch_finalize(debugs);
-}
-
-static char **handle_switch_U(char *arg, char **next)
-{
- const char *name = arg + 1;
- add_pre_buffer ("#undef %s\n", name);
- return next;
-}
-
-static char **handle_switch_O(char *arg, char **next)
-{
- int level = 1;
- if (arg[1] >= '0' && arg[1] <= '9')
- level = arg[1] - '0';
- optimize_level = level;
- optimize_size = arg[1] == 's';
- return next;
-}
-
-static int handle_ftabstop(const char *arg, const char *opt, const struct flag *flag, int options)
-{
- unsigned long val;
- char *end;
-
- if (*opt == '\0')
- die("error: missing argument to \"%s\"", arg);
-
- /* we silently ignore silly values */
- val = strtoul(opt, &end, 10);
- if (*end == '\0' && 1 <= val && val <= 100)
- tabstop = val;
-
- return 1;
-}
-
-static int handle_fpasses(const char *arg, const char *opt, const struct flag *flag, int options)
-{
- unsigned long mask;
-
- mask = flag->mask;
- if (*opt == '\0') {
- if (options & OPT_INVERSE)
- fpasses &= ~mask;
- else
- fpasses |= mask;
- return 1;
- }
- if (options & OPT_INVERSE)
- return 0;
- if (!strcmp(opt, "-enable")) {
- fpasses |= mask;
- return 1;
- }
- if (!strcmp(opt, "-disable")) {
- fpasses &= ~mask;
- return 1;
- }
- if (!strcmp(opt, "=last")) {
- // clear everything above
- mask |= mask - 1;
- fpasses &= mask;
- return 1;
- }
- return 0;
-}
-
-static int handle_fdiagnostic_prefix(const char *arg, const char *opt, const struct flag *flag, int options)
-{
- switch (*opt) {
- case '\0':
- diag_prefix = "sparse: ";
- return 1;
- case '=':
- diag_prefix = xasprintf("%s: ", opt+1);
- return 1;
- default:
- return 0;
- }
-}
-
-static int handle_fdump_ir(const char *arg, const char *opt, const struct flag *flag, int options)
-{
- static const struct mask_map dump_ir_options[] = {
- { "", PASS_LINEARIZE },
- { "linearize", PASS_LINEARIZE },
- { "mem2reg", PASS_MEM2REG },
- { "final", PASS_FINAL },
- { },
- };
-
- return handle_suboption_mask(arg, opt, dump_ir_options, &fdump_ir);
-}
-
-static int handle_fmemcpy_max_count(const char *arg, const char *opt, const struct flag *flag, int options)
-{
- opt_ullong(arg, opt, &fmemcpy_max_count, OPTNUM_ZERO_IS_INF|OPTNUM_UNLIMITED);
- return 1;
-}
-
-static int handle_fmax_warnings(const char *arg, const char *opt, const struct flag *flag, int options)
-{
- opt_uint(arg, opt, &fmax_warnings, OPTNUM_UNLIMITED);
- return 1;
-}
-
-static struct flag fflags[] = {
- { "diagnostic-prefix", NULL, handle_fdiagnostic_prefix },
- { "dump-ir", NULL, handle_fdump_ir },
- { "freestanding", &fhosted, NULL, OPT_INVERSE },
- { "hosted", &fhosted },
- { "linearize", NULL, handle_fpasses, PASS_LINEARIZE },
- { "max-warnings=", NULL, handle_fmax_warnings },
- { "mem-report", &fmem_report },
- { "memcpy-max-count=", NULL, handle_fmemcpy_max_count },
- { "tabstop=", NULL, handle_ftabstop },
- { "mem2reg", NULL, handle_fpasses, PASS_MEM2REG },
- { "optim", NULL, handle_fpasses, PASS_OPTIM },
- { "pic", &fpic, handle_switch_setval, 1 },
- { "PIC", &fpic, handle_switch_setval, 2 },
- { "pie", &fpie, handle_switch_setval, 1 },
- { "PIE", &fpie, handle_switch_setval, 2 },
- { "signed-char", &funsigned_char, NULL, OPT_INVERSE },
- { "short-wchar", &fshort_wchar },
- { "unsigned-char", &funsigned_char, NULL, },
- { },
-};
-
-static char **handle_switch_f(char *arg, char **next)
-{
- if (handle_switches(arg-1, arg+1, fflags))
- return next;
-
- return next;
-}
-
-static char **handle_switch_G(char *arg, char **next)
-{
- if (!strcmp (arg, "G") && *next)
- return next + 1; // "-G 0"
- else
- return next; // "-G0" or (bogus) terminal "-G"
-}
-
-static char **handle_switch_a(char *arg, char **next)
-{
- if (!strcmp (arg, "ansi"))
- standard = STANDARD_C89;
-
- return next;
-}
-
static char **handle_switch_s(const char *arg, char **next)
{
if ((arg = match_option(arg, "std="))) {
@@ -1087,36 +992,129 @@ static char **handle_switch_s(const char *arg, char **next)
return next;
}
-static char **handle_nostdinc(char *arg, char **next)
+static char **handle_switch_U(char *arg, char **next)
{
- add_pre_buffer("#nostdinc\n");
+ const char *name = arg + 1;
+ add_pre_buffer ("#undef %s\n", name);
return next;
}
-static char **handle_switch_n(char *arg, char **next)
+static struct flag debugs[] = {
+ { "compound", &dbg_compound},
+ { "dead", &dbg_dead},
+ { "domtree", &dbg_domtree},
+ { "entry", &dbg_entry},
+ { "ir", &dbg_ir},
+ { "postorder", &dbg_postorder},
+ { }
+};
+
+static char **handle_switch_v(char *arg, char **next)
{
- if (!strcmp (arg, "nostdinc"))
- return handle_nostdinc(arg, next);
+ char ** ret = handle_onoff_switch(arg, next, debugs);
+ if (ret)
+ return ret;
+ // Unknown.
+ do {
+ verbose++;
+ } while (*++arg == 'v');
return next;
}
-static char **handle_base_dir(char *arg, char **next)
+static void handle_switch_v_finalize(void)
{
- gcc_base_dir = *++next;
- if (!gcc_base_dir)
- die("missing argument for -gcc-base-dir option");
- return next;
+ handle_onoff_switch_finalize(debugs);
}
-static char **handle_switch_g(char *arg, char **next)
+static const struct flag warnings[] = {
+ { "address", &Waddress },
+ { "address-space", &Waddress_space },
+ { "bitwise", &Wbitwise },
+ { "bitwise-pointer", &Wbitwise_pointer},
+ { "cast-from-as", &Wcast_from_as },
+ { "cast-to-as", &Wcast_to_as },
+ { "cast-truncate", &Wcast_truncate },
+ { "constant-suffix", &Wconstant_suffix },
+ { "constexpr-not-const", &Wconstexpr_not_const},
+ { "context", &Wcontext },
+ { "decl", &Wdecl },
+ { "declaration-after-statement", &Wdeclarationafterstatement },
+ { "default-bitfield-sign", &Wdefault_bitfield_sign },
+ { "designated-init", &Wdesignated_init },
+ { "do-while", &Wdo_while },
+ { "enum-mismatch", &Wenum_mismatch },
+ { "external-function-has-definition", &Wexternal_function_has_definition },
+ { "implicit-int", &Wimplicit_int },
+ { "init-cstring", &Winit_cstring },
+ { "int-to-pointer-cast", &Wint_to_pointer_cast },
+ { "memcpy-max-count", &Wmemcpy_max_count },
+ { "non-pointer-null", &Wnon_pointer_null },
+ { "newline-eof", &Wnewline_eof },
+ { "old-initializer", &Wold_initializer },
+ { "old-style-definition", &Wold_style_definition },
+ { "one-bit-signed-bitfield", &Wone_bit_signed_bitfield },
+ { "override-init", &Woverride_init },
+ { "override-init-all", &Woverride_init_all },
+ { "paren-string", &Wparen_string },
+ { "pedantic", &Wpedantic },
+ { "pointer-to-int-cast", &Wpointer_to_int_cast },
+ { "ptr-subtraction-blows", &Wptr_subtraction_blows },
+ { "return-void", &Wreturn_void },
+ { "shadow", &Wshadow },
+ { "shift-count-negative", &Wshift_count_negative },
+ { "shift-count-overflow", &Wshift_count_overflow },
+ { "sizeof-bool", &Wsizeof_bool },
+ { "strict-prototypes", &Wstrict_prototypes },
+ { "pointer-arith", &Wpointer_arith },
+ { "sparse-error", &Wsparse_error },
+ { "tautological-compare", &Wtautological_compare },
+ { "transparent-union", &Wtransparent_union },
+ { "typesign", &Wtypesign },
+ { "undef", &Wundef },
+ { "uninitialized", &Wuninitialized },
+ { "universal-initializer", &Wuniversal_initializer },
+ { "unknown-attribute", &Wunknown_attribute },
+ { "vla", &Wvla },
+ { }
+};
+
+static char **handle_switch_W(char *arg, char **next)
{
- if (!strcmp (arg, "gcc-base-dir"))
- return handle_base_dir(arg, next);
+ char ** ret = handle_onoff_switch(arg, next, warnings);
+ if (ret)
+ return ret;
+ if (!strcmp(arg, "Wsparse-all")) {
+ int i;
+ for (i = 0; warnings[i].name; i++) {
+ if (*warnings[i].flag != FLAG_FORCE_OFF)
+ *warnings[i].flag = FLAG_ON;
+ }
+ }
+
+ // Unknown.
return next;
}
+static void handle_switch_W_finalize(void)
+{
+ handle_onoff_switch_finalize(warnings);
+
+ /* default Wdeclarationafterstatement based on the C dialect */
+ if (-1 == Wdeclarationafterstatement) {
+ switch (standard) {
+ case STANDARD_C89:
+ case STANDARD_C94:
+ Wdeclarationafterstatement = 1;
+ break;
+ default:
+ Wdeclarationafterstatement = 0;
+ break;
+ }
+ }
+}
+
static char **handle_switch_x(char *arg, char **next)
{
if (!*++next)
@@ -1139,12 +1137,6 @@ static char **handle_arch(char *arg, char **next)
return next;
}
-static char **handle_version(char *arg, char **next)
-{
- printf("%s\n", SPARSE_VERSION);
- exit(0);
-}
-
static char **handle_param(char *arg, char **next)
{
char *value = NULL;
@@ -1162,6 +1154,12 @@ static char **handle_param(char *arg, char **next)
return next;
}
+static char **handle_version(char *arg, char **next)
+{
+ printf("%s\n", SPARSE_VERSION);
+ exit(0);
+}
+
struct switches {
const char *name;
char **(*fn)(char *, char **);
--
2.27.0