diff options
Diffstat (limited to 'posix')
-rw-r--r-- | posix/tstgetopt.args | 3 | ||||
-rw-r--r-- | posix/tstgetopt.c | 64 |
2 files changed, 42 insertions, 25 deletions
diff --git a/posix/tstgetopt.args b/posix/tstgetopt.args index 023e102a24..c82c86560e 100644 --- a/posix/tstgetopt.args +++ b/posix/tstgetopt.args @@ -1 +1,2 @@ --a -b -cfoobar +-a -b -cfoobar --required foobar --optional=bazbug --none random + diff --git a/posix/tstgetopt.c b/posix/tstgetopt.c index fd2d4d0469..2258b20770 100644 --- a/posix/tstgetopt.c +++ b/posix/tstgetopt.c @@ -1,41 +1,57 @@ -#include <ansidecl.h> #include <unistd.h> #include <stdio.h> +#include <getopt.h> -int main (int argc, char **argv) +int +main (int argc, char **argv) { + static const struct option options[] = + { + {"required", required_argument, NULL, 'r'}, + {"optional", optional_argument, NULL, 'o'}, + {"none", no_argument, NULL, 'n'} + }; + int aflag = 0; int bflag = 0; char *cvalue = NULL; int index; int c; - while ((c = getopt (argc, argv, "abc:")) >= 0) - switch (c) { - case 'a': - aflag = 1; - break; - case 'b': - bflag = 1; - break; - case 'c': - cvalue = optarg; - break; - case '?': -#if 0 - fprintf (stderr, "Unknown option %c.\n", optopt); -#else - fputs ("Unknown option.\n", stderr); -#endif - return -1; - default: - fprintf (stderr, "This should never happen!\n"); - return -1; - } + while ((c = getopt_long (argc, argv, "abc:", options, NULL)) >= 0) + switch (c) + { + case 'a': + aflag = 1; + break; + case 'b': + bflag = 1; + break; + case 'c': + cvalue = optarg; + break; + case '?': + fputs ("Unknown option.\n", stderr); + return 1; + default: + fprintf (stderr, "This should never happen!\n"); + return 1; + + case 'r': + printf ("--required %s\n", optarg); + break; + case 'o': + printf ("--optional %s\n", optarg); + break; + case 'n': + puts ("--none"); + break; + } printf ("aflag = %d, bflag = %d, cvalue = %s\n", aflag, bflag, cvalue); for (index = optind; index < argc; index++) printf ("Non-option argument %s\n", argv[index]); + return 0; } |