summaryrefslogtreecommitdiff
path: root/test/unistd
diff options
context:
space:
mode:
Diffstat (limited to 'test/unistd')
-rw-r--r--test/unistd/.cvsignore2
-rw-r--r--test/unistd/Makefile16
-rw-r--r--test/unistd/getopt.c69
-rw-r--r--test/unistd/getopt_long.c93
4 files changed, 179 insertions, 1 deletions
diff --git a/test/unistd/.cvsignore b/test/unistd/.cvsignore
index dad5c62bd..7575c2281 100644
--- a/test/unistd/.cvsignore
+++ b/test/unistd/.cvsignore
@@ -2,3 +2,5 @@ fork
fork_glibc
vfork
vfork_glibc
+getopt
+getopt_long
diff --git a/test/unistd/Makefile b/test/unistd/Makefile
index 251f4c78e..360392612 100644
--- a/test/unistd/Makefile
+++ b/test/unistd/Makefile
@@ -21,7 +21,7 @@ include $(TESTDIR)/Rules.mak
-TARGETS=fork fork_glibc vfork vfork_glibc getcwd
+TARGETS=fork fork_glibc vfork vfork_glibc getcwd getopt getopt_long
all: $(TARGETS)
getcwd: getcwd.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
@@ -79,6 +79,20 @@ vfork_glibc: vfork.c ../testsuite.h Makefile
-./$@
-@ echo " "
+getopt: getopt.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
+ $(CC) $(CFLAGS) -c $< -o $@.o
+ $(CC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LIBS)
+ $(STRIPTOOL) -x -R .note -R .comment $@
+ ./$@ -abcXXX -9
+ -@ echo " "
+
+getopt_long: getopt_long.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
+ $(CC) $(CFLAGS) -c $< -o $@.o
+ $(CC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LIBS)
+ $(STRIPTOOL) -x -R .note -R .comment $@
+ ./$@ --add XXX --delete YYY --verbose
+ -@ echo " "
+
clean:
rm -f *.[oa] *~ core $(TARGETS)
diff --git a/test/unistd/getopt.c b/test/unistd/getopt.c
new file mode 100644
index 000000000..401765cc8
--- /dev/null
+++ b/test/unistd/getopt.c
@@ -0,0 +1,69 @@
+/* Getopt tests */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <getopt.h>
+
+
+int main (int argc, char **argv)
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1)
+ {
+ int this_option_optind = optind ? optind : 1;
+
+ c = getopt (argc, argv, "abc:d:0123456789");
+ if (c == EOF)
+ break;
+
+ switch (c)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf ("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf ("option %c\n", c);
+ break;
+
+ case 'a':
+ printf ("option a\n");
+ break;
+
+ case 'b':
+ printf ("option b\n");
+ break;
+
+ case 'c':
+ printf ("option c with value `%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf ("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc)
+ {
+ printf ("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf ("%s ", argv[optind++]);
+ printf ("\n");
+ }
+ exit (0);
+}
+
diff --git a/test/unistd/getopt_long.c b/test/unistd/getopt_long.c
new file mode 100644
index 000000000..4064e224d
--- /dev/null
+++ b/test/unistd/getopt_long.c
@@ -0,0 +1,93 @@
+/* Getopt tests */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <getopt.h>
+
+
+int main (int argc, char **argv)
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1)
+ {
+ int this_option_optind = optind ? optind : 1;
+ int option_index = 0;
+ static struct option long_options[] =
+ {
+ {"add", 1, 0, 0},
+ {"append", 0, 0, 0},
+ {"delete", 1, 0, 0},
+ {"verbose", 0, 0, 0},
+ {"create", 0, 0, 0},
+ {"file", 1, 0, 0},
+ {0, 0, 0, 0}
+ };
+
+ c = getopt_long (argc, argv, "abc:d:0123456789",
+ long_options, &option_index);
+ if (c == EOF)
+ break;
+
+ switch (c)
+ {
+ case 0:
+ printf ("option %s", long_options[option_index].name);
+ if (optarg)
+ printf (" with arg %s", optarg);
+ printf ("\n");
+ break;
+
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf ("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf ("option %c\n", c);
+ break;
+
+ case 'a':
+ printf ("option a\n");
+ break;
+
+ case 'b':
+ printf ("option b\n");
+ break;
+
+ case 'c':
+ printf ("option c with value `%s'\n", optarg);
+ break;
+
+ case 'd':
+ printf ("option d with value `%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf ("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc)
+ {
+ printf ("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf ("%s ", argv[optind++]);
+ printf ("\n");
+ }
+
+ exit (0);
+}
+