From bd25564e1e98910ed69043ed6a6f884ce60e5780 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 15 May 2011 13:35:09 -0400 Subject: Provide more helpful error message in getopt If provide with an ambiguous long option we now show all the possibilities. --- posix/tst-getopt_long1.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 posix/tst-getopt_long1.c (limited to 'posix/tst-getopt_long1.c') 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; +} -- cgit 1.4.1