summaryrefslogtreecommitdiffstats
path: root/usr/klibc/tests/getoptlong.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/klibc/tests/getoptlong.c')
-rw-r--r--usr/klibc/tests/getoptlong.c57
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;
+}