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:#define getopt_trivial_usage
|
||||||
//usage: "[OPTIONS]"
|
//usage: "[OPTIONS] [--] OPTSTRING PARAMS"
|
||||||
//usage:#define getopt_full_usage "\n\n"
|
//usage:#define getopt_full_usage "\n\n"
|
||||||
//usage: IF_LONG_OPTS(
|
//usage: IF_LONG_OPTS(
|
||||||
//usage: " -a,--alternative Allow long options starting with single -"
|
//usage: " -a,--alternative Allow long options starting with single -"
|
||||||
//usage: "\n -l,--longoptions=longopts Long 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 -n,--name=PROGNAME The name under which errors are reported"
|
||||||
//usage: "\n -o,--options=optstring Short options to be recognized"
|
//usage: "\n -o,--options=OPTSTRING Short options to be recognized"
|
||||||
//usage: "\n -q,--quiet Disable error reporting by getopt(3)"
|
//usage: "\n -q,--quiet Disable error reporting by getopt(3)"
|
||||||
//usage: "\n -Q,--quiet-output No normal output"
|
//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 -T,--test Test for getopt(1) version"
|
||||||
//usage: "\n -u,--unquoted Don't quote the output"
|
//usage: "\n -u,--unquoted Don't quote the output"
|
||||||
//usage: )
|
//usage: )
|
||||||
//usage: IF_NOT_LONG_OPTS(
|
//usage: IF_NOT_LONG_OPTS(
|
||||||
//usage: " -a Allow long options starting with single -"
|
//usage: " -a Allow long options starting with single -"
|
||||||
//usage: "\n -l longopts Long 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 -n PROGNAME The name under which errors are reported"
|
||||||
//usage: "\n -o optstring Short options to be recognized"
|
//usage: "\n -o OPTSTRING Short options to be recognized"
|
||||||
//usage: "\n -q Disable error reporting by getopt(3)"
|
//usage: "\n -q Disable error reporting by getopt(3)"
|
||||||
//usage: "\n -Q No normal output"
|
//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 -T Test for getopt(1) version"
|
||||||
//usage: "\n -u Don't quote the output"
|
//usage: "\n -u Don't quote the output"
|
||||||
//usage: )
|
//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:
|
||||||
//usage:#define getopt_example_usage
|
//usage:#define getopt_example_usage
|
||||||
//usage: "$ cat getopt.test\n"
|
//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) MAIN_EXTERNALLY_VISIBLE;
|
||||||
int getopt_main(int argc, char **argv)
|
int getopt_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
int n;
|
||||||
char *optstr = NULL;
|
char *optstr = NULL;
|
||||||
char *name = NULL;
|
char *name = NULL;
|
||||||
unsigned opt;
|
unsigned opt;
|
||||||
@ -351,7 +370,7 @@ int getopt_main(int argc, char **argv)
|
|||||||
|
|
||||||
compatible = getenv("GETOPT_COMPATIBLE"); /* used as yes/no flag */
|
compatible = getenv("GETOPT_COMPATIBLE"); /* used as yes/no flag */
|
||||||
|
|
||||||
if (argc == 1) {
|
if (!argv[1]) {
|
||||||
if (compatible) {
|
if (compatible) {
|
||||||
/* For some reason, the original getopt gave no error
|
/* For some reason, the original getopt gave no error
|
||||||
when there were no arguments. */
|
when there were no arguments. */
|
||||||
@ -362,10 +381,10 @@ int getopt_main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (argv[1][0] != '-' || compatible) {
|
if (argv[1][0] != '-' || compatible) {
|
||||||
char *s;
|
char *s = argv[1];
|
||||||
|
|
||||||
option_mask32 |= OPT_u; /* quoting off */
|
option_mask32 |= OPT_u; /* quoting off */
|
||||||
s = xstrdup(argv[1] + strspn(argv[1], "-+"));
|
s = xstrdup(s + strspn(s, "-+"));
|
||||||
argv[1] = argv[0];
|
argv[1] = argv[0];
|
||||||
return generate_output(argv+1, argc-1, s, long_options);
|
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 */
|
/* All options controlling the applet have now been parsed */
|
||||||
|
n = optind - 1;
|
||||||
if (!optstr) {
|
if (!optstr) {
|
||||||
if (optind >= argc)
|
optstr = argv[++n];
|
||||||
|
if (!optstr)
|
||||||
bb_error_msg_and_die("missing optstring argument");
|
bb_error_msg_and_die("missing optstring argument");
|
||||||
optstr = argv[optind++];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
argv[optind-1] = name ? name : argv[0];
|
argv[n] = name ? name : argv[0];
|
||||||
return generate_output(argv+optind-1, argc-optind+1, optstr, long_options);
|
return generate_output(argv + n, argc - n, optstr, long_options);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user