diff options
author | Ulrich Drepper <drepper@gmail.com> | 2011-05-15 13:35:09 -0400 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2011-05-15 13:35:09 -0400 |
commit | bd25564e1e98910ed69043ed6a6f884ce60e5780 (patch) | |
tree | 76b63ae4d281a28b7a00956504eb8ea13e8e2118 /posix/tst-getopt_long1.c | |
parent | bac102db9293f3f619c319312e05dfeb7051a7ad (diff) | |
download | glibc-bd25564e1e98910ed69043ed6a6f884ce60e5780.tar.gz glibc-bd25564e1e98910ed69043ed6a6f884ce60e5780.tar.xz glibc-bd25564e1e98910ed69043ed6a6f884ce60e5780.zip |
Provide more helpful error message in getopt
If provide with an ambiguous long option we now show all the possibilities.
Diffstat (limited to 'posix/tst-getopt_long1.c')
-rw-r--r-- | posix/tst-getopt_long1.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/posix/tst-getopt_long1.c b/posix/tst-getopt_long1.c new file mode 100644 index 0000000000..e0ecd12190 --- /dev/null +++ b/posix/tst-getopt_long1.c @@ -0,0 +1,62 @@ +static void do_prepare (void); +#define PREPARE(argc, argv) do_prepare () +static int do_test (void); +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" + + +static char *fname; + + +static void +do_prepare (void) +{ + if (create_temp_file ("tst-getopt_long1", &fname) < 0) + { + printf ("cannot create temp file: %m\n"); + exit (1); + } +} + + +static const struct option opts[] = + { + { "one", no_argument, NULL, '1' }, + { "two", no_argument, NULL, '2' }, + { "one-one", no_argument, NULL, '3' }, + { "four", no_argument, NULL, '4' }, + { "onto", no_argument, NULL, '5' }, + { NULL, 0, NULL, 0 } + }; + + +static int +do_test (void) +{ + if (freopen (fname, "w+", stderr) == NULL) + { + printf ("freopen failed: %m\n"); + return 1; + } + + char *argv[] = { "program", "--on" }; + int argc = 2; + + int c = getopt_long (argc, argv, "12345", opts, NULL); + printf ("return value: %c\n", c); + + rewind (stderr); + char *line = NULL; + size_t len = 0; + if (getline (&line, &len, stderr) < 0) + { + printf ("cannot read stderr redirect: %m\n"); + return 1; + } + printf ("message = \"%s\"\n", line); + + static const char expected[] = "\ +program: option '--on' is ambiguous; possibilities: '--one' '--onto' '--one-one'\n"; + + return c != '?' || strcmp (line, expected) != 0; +} |