getopt: simple code shrink; expand help text
function old new delta packed_usage 28978 29184 +206 getopt_main 656 632 -24 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
9106107a50
commit
594db1e62a
@ -32,30 +32,48 @@
|
||||
*/
|
||||
|
||||
//usage:#define getopt_trivial_usage
|
||||
//usage: "[OPTIONS]"
|
||||
//usage: "[OPTIONS] [--] OPTSTRING PARAMS"
|
||||
//usage:#define getopt_full_usage "\n\n"
|
||||
//usage: IF_LONG_OPTS(
|
||||
//usage: " -a,--alternative Allow long options starting with single -"
|
||||
//usage: "\n -l,--longoptions=longopts Long options to be recognized"
|
||||
//usage: "\n -n,--name=progname The name under which errors are reported"
|
||||
//usage: "\n -o,--options=optstring Short options to be recognized"
|
||||
//usage: "\n -l,--longoptions=LOPT[,...] Long options to be recognized"
|
||||
//usage: "\n -n,--name=PROGNAME The name under which errors are reported"
|
||||
//usage: "\n -o,--options=OPTSTRING Short options to be recognized"
|
||||
//usage: "\n -q,--quiet Disable error reporting by getopt(3)"
|
||||
//usage: "\n -Q,--quiet-output No normal output"
|
||||
//usage: "\n -s,--shell=shell Set shell quoting conventions"
|
||||
//usage: "\n -s,--shell=SHELL Set shell quoting conventions"
|
||||
//usage: "\n -T,--test Test for getopt(1) version"
|
||||
//usage: "\n -u,--unquoted Don't quote the output"
|
||||
//usage: )
|
||||
//usage: IF_NOT_LONG_OPTS(
|
||||
//usage: " -a Allow long options starting with single -"
|
||||
//usage: "\n -l longopts Long options to be recognized"
|
||||
//usage: "\n -n progname The name under which errors are reported"
|
||||
//usage: "\n -o optstring Short options to be recognized"
|
||||
//usage: "\n -l LOPT[,...] Long options to be recognized"
|
||||
//usage: "\n -n PROGNAME The name under which errors are reported"
|
||||
//usage: "\n -o OPTSTRING Short options to be recognized"
|
||||
//usage: "\n -q Disable error reporting by getopt(3)"
|
||||
//usage: "\n -Q No normal output"
|
||||
//usage: "\n -s shell Set shell quoting conventions"
|
||||
//usage: "\n -s SHELL Set shell quoting conventions"
|
||||
//usage: "\n -T Test for getopt(1) version"
|
||||
//usage: "\n -u Don't quote the output"
|
||||
//usage: )
|
||||
//usage: "\n"
|
||||
//usage: "\nExample:"
|
||||
//usage: "\n"
|
||||
//usage: "\nO=`getopt -l bb: -- ab:c:: \"$@\"`"
|
||||
//usage: "\n[ $? = 0 ] || exit 1"
|
||||
//usage: "\neval set -- \"$O\""
|
||||
//usage: "\nwhile true; do"
|
||||
//usage: "\n case \"$1\" in"
|
||||
//usage: "\n -a) echo A; shift;;"
|
||||
//usage: "\n -b|--bb) echo \"B:'$2'\"; shift 2;;"
|
||||
//usage: "\n -c) case \"$2\" in"
|
||||
//usage: "\n \"\") echo C; shift 2;;"
|
||||
//usage: "\n *) echo \"C:'$2'\"; shift 2;;"
|
||||
//usage: "\n esac;;"
|
||||
//usage: "\n --) shift; break;;"
|
||||
//usage: "\n *) echo Error; exit 1;;"
|
||||
//usage: "\n esac"
|
||||
//usage: "\ndone"
|
||||
//usage:
|
||||
//usage:#define getopt_example_usage
|
||||
//usage: "$ cat getopt.test\n"
|
||||
@ -339,6 +357,7 @@ static const char getopt_longopts[] ALIGN1 =
|
||||
int getopt_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
||||
int getopt_main(int argc, char **argv)
|
||||
{
|
||||
int n;
|
||||
char *optstr = NULL;
|
||||
char *name = NULL;
|
||||
unsigned opt;
|
||||
@ -351,7 +370,7 @@ int getopt_main(int argc, char **argv)
|
||||
|
||||
compatible = getenv("GETOPT_COMPATIBLE"); /* used as yes/no flag */
|
||||
|
||||
if (argc == 1) {
|
||||
if (!argv[1]) {
|
||||
if (compatible) {
|
||||
/* For some reason, the original getopt gave no error
|
||||
when there were no arguments. */
|
||||
@ -362,10 +381,10 @@ int getopt_main(int argc, char **argv)
|
||||
}
|
||||
|
||||
if (argv[1][0] != '-' || compatible) {
|
||||
char *s;
|
||||
char *s = argv[1];
|
||||
|
||||
option_mask32 |= OPT_u; /* quoting off */
|
||||
s = xstrdup(argv[1] + strspn(argv[1], "-+"));
|
||||
s = xstrdup(s + strspn(s, "-+"));
|
||||
argv[1] = argv[0];
|
||||
return generate_output(argv+1, argc-1, s, long_options);
|
||||
}
|
||||
@ -392,12 +411,13 @@ int getopt_main(int argc, char **argv)
|
||||
}
|
||||
|
||||
/* All options controlling the applet have now been parsed */
|
||||
n = optind - 1;
|
||||
if (!optstr) {
|
||||
if (optind >= argc)
|
||||
optstr = argv[++n];
|
||||
if (!optstr)
|
||||
bb_error_msg_and_die("missing optstring argument");
|
||||
optstr = argv[optind++];
|
||||
}
|
||||
|
||||
argv[optind-1] = name ? name : argv[0];
|
||||
return generate_output(argv+optind-1, argc-optind+1, optstr, long_options);
|
||||
argv[n] = name ? name : argv[0];
|
||||
return generate_output(argv + n, argc - n, optstr, long_options);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user