diff options
Diffstat (limited to 'usr/klibc/tests/getoptlong.c')
-rw-r--r-- | usr/klibc/tests/getoptlong.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/usr/klibc/tests/getoptlong.c b/usr/klibc/tests/getoptlong.c new file mode 100644 index 0000000..6c019b7 --- /dev/null +++ b/usr/klibc/tests/getoptlong.c @@ -0,0 +1,57 @@ +/* + * getoptlong.c + * + * Simple test for getopt_long, set the environment variable GETOPTTEST + * to give the argument string to getopt() + */ + +#include <stdlib.h> +#include <unistd.h> +#include <stdio.h> +#include <getopt.h> + +static int foo = 0; + +static const struct option long_options[] = { + { "first", 1, NULL, 'f' }, + { "second", 0, NULL, 's' }, + { "third", 2, NULL, '3' }, + { "fourth", 0, NULL, 4 }, + { "set-foo", 0, &foo, 1 }, + { NULL, 0, NULL, 0 } +}; + +int main(int argc, char *const *argv) +{ + const char *parser; + const char *showchar; + char one_char[] = "\'?\'"; + char num_buf[16]; + int c; + int longindex; + + parser = getenv("GETOPTTEST"); + if (!parser) + parser = "abzf:o:"; + + do { + c = getopt_long(argc, argv, parser, long_options, &longindex); + + if (c == EOF) { + showchar = "EOF"; + } else if (c >= 32 && c <= 126) { + one_char[1] = c; + showchar = one_char; + } else { + snprintf(num_buf, sizeof num_buf, "%d", c); + showchar = num_buf; + } + + printf("c = %s, optind = %d (\"%s\"), optarg = \"%s\", " + "optopt = \'%c\', foo = %d, longindex = %d\n", + showchar, optind, argv[optind], + optarg, optopt, foo, longindex); + } while (c != -1); + + return 0; +} |