X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=main.c;h=0b77b508d471784936ce2a800f92692aa38be41f;hb=a64bc1e52d58df16a980190e3c514fd60ee89fa9;hp=bedb333ff36604191e5df3688327d95e2f4ed21f;hpb=8387fcb03edc718f031bc5b6af056c2ef408f3d5;p=android-x86%2Fexternal-toybox.git diff --git a/main.c b/main.c index bedb333f..0b77b508 100644 --- a/main.c +++ b/main.c @@ -6,14 +6,17 @@ #include "toys.h" #ifndef TOYBOX_VERSION -#define TOYBOX_VERSION "0.7.1" +#ifndef TOYBOX_VENDOR +#define TOYBOX_VENDOR "" +#endif +#define TOYBOX_VERSION "0.7.5"TOYBOX_VENDOR #endif // Populate toy_list[]. #undef NEWTOY #undef OLDTOY -#define NEWTOY(name, opts, flags) {#name, name##_main, opts, flags}, +#define NEWTOY(name, opts, flags) {#name, name##_main, OPTSTR_##name, flags}, #define OLDTOY(name, oldname, flags) \ {#name, oldname##_main, OPTSTR_##oldname, flags}, @@ -49,7 +52,7 @@ struct toy_list *toy_find(char *name) if (middletop) return NULL; result = strcmp(name,toy_list[middle].name); if (!result) return toy_list+middle; - if (result<0) top=--middle; + if (result<0) top = --middle; else bottom = ++middle; } } @@ -67,19 +70,34 @@ static const int NEED_OPTIONS = #include "generated/newtoys.h" 0; // Ends the opts || opts || opts... +static void unknown(char *name) +{ + toys.exitval = 127; + toys.which = toy_list; + error_exit("Unknown command %s", name); +} + // Setup toybox global state for this command. static void toy_singleinit(struct toy_list *which, char *argv[]) { toys.which = which; toys.argv = argv; - if (CFG_TOYBOX_I18N) setlocale(LC_ALL, "C"+!!(which->flags & TOYFLAG_LOCALE)); + if (CFG_TOYBOX_I18N) setlocale(LC_CTYPE, "C.UTF-8"); + + // Parse --help and --version for (almost) all commands + if (CFG_TOYBOX_HELP_DASHDASH && !(which->flags & TOYFLAG_NOHELP) && argv[1]) { + if (!strcmp(argv[1], "--help")) { + if (CFG_TOYBOX && toys.which == toy_list && toys.argv[2]) + if (!(toys.which = toy_find(toys.argv[2]))) unknown(toys.argv[2]); + show_help(stdout); + xexit(); + } - if (CFG_TOYBOX_HELP_DASHDASH && argv[1] && !strcmp(argv[1], "--help")) { - if (CFG_TOYBOX && toys.which == toy_list && toys.argv[2]) - if (!(toys.which = toy_find(toys.argv[2]))) return; - show_help(stdout); - xexit(); + if (!strcmp(argv[1], "--version")) { + xputs("toybox "TOYBOX_VERSION); + xexit(); + } } if (NEED_OPTIONS && which->options) get_optflags(); @@ -166,16 +184,7 @@ void toybox_main(void) // For early error reporting toys.which = toy_list; - if (toys.argv[1]) { - if (!strcmp("--version", toys.argv[1])) { - xputs(TOYBOX_VERSION); - xexit(); - } - if (toys.argv[1][0] != '-') { - toys.exitval = 127; - error_exit("Unknown command %s", toys.argv[1]); - } - } + if (toys.argv[1] && toys.argv[1][0] != '-') unknown(toys.argv[1]); // Output list of command. for (i=1; i