diff --git a/ChangeLog b/ChangeLog index 71c838c22e..894f97180d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2000-09-06 Ulrich Drepper + + * posix/getopt.c (_getopt_internal): Don't recognize an option + name as ambiguous if it's a prefix for more than one name but the + other struct option values are identical. + + * posix/tstgetopt.c: Add test for improved ambiguity recognition. + Don't depend on visual inspection of the output file to recognize + errors. + * posix/Makefile (tstgetopt-ARGS): Add a few more parameters. + 2000-09-06 Andreas Jaeger * sysdeps/alpha/soft-fp/Dist: New file. diff --git a/posix/Makefile b/posix/Makefile index d1dc009bf4..24a8c67b12 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -109,7 +109,7 @@ endif CFLAGS-regex.c = -Wno-strict-prototypes CFLAGS-getaddrinfo.c = -DRESOLVER tstgetopt-ARGS = -a -b -cfoobar --required foobar --optional=bazbug \ - --none random + --none random --col --color --colour tst-exec-ARGS = -- $(built-program-cmd) tst-spawn-ARGS = -- $(built-program-cmd) diff --git a/posix/tstgetopt.c b/posix/tstgetopt.c index 40cf3d9c82..97ae2ef251 100644 --- a/posix/tstgetopt.c +++ b/posix/tstgetopt.c @@ -1,6 +1,7 @@ -#include -#include #include +#include +#include +#include int main (int argc, char **argv) @@ -10,14 +11,19 @@ main (int argc, char **argv) {"required", required_argument, NULL, 'r'}, {"optional", optional_argument, NULL, 'o'}, {"none", no_argument, NULL, 'n'}, + {"color", no_argument, NULL, 'C'}, + {"colour", no_argument, NULL, 'C'}, {NULL, 0, NULL, 0 } }; int aflag = 0; int bflag = 0; char *cvalue = NULL; + int Cflag = 0; + int nflag = 0; int index; int c; + int result = 0; while ((c = getopt_long (argc, argv, "abc:", options, NULL)) >= 0) switch (c) @@ -31,6 +37,9 @@ main (int argc, char **argv) case 'c': cvalue = optarg; break; + case 'C': + ++Cflag; + break; case '?': fputs ("Unknown option.\n", stderr); return 1; @@ -40,19 +49,28 @@ main (int argc, char **argv) case 'r': printf ("--required %s\n", optarg); + result |= strcmp (optarg, "foobar") != 0; break; case 'o': printf ("--optional %s\n", optarg); + result |= optarg == NULL || strcmp (optarg, "bazbug") != 0; break; case 'n': puts ("--none"); + nflag = 1; break; } - printf ("aflag = %d, bflag = %d, cvalue = %s\n", aflag, bflag, cvalue); + printf ("aflag = %d, bflag = %d, cvalue = %s, Cflags = %d, nflag = %d\n", + aflag, bflag, cvalue, Cflag, nflag); + + result |= (aflag != 1 || bflag != 1 || cvalue == NULL + || strcmp (cvalue, "foobar") != 0 || Cflag != 3 || nflag != 1); for (index = optind; index < argc; index++) printf ("Non-option argument %s\n", argv[index]); - return 0; + result |= optind + 1 != argc || strcmp (argv[optind], "random") != 0; + + return result; }