summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--regress/lib/libc/fnmatch/Makefile8
-rw-r--r--regress/lib/libc/fnmatch/fnm_test.c45
-rw-r--r--regress/lib/libc/fnmatch/fnm_test.in5
3 files changed, 58 insertions, 0 deletions
diff --git a/regress/lib/libc/fnmatch/Makefile b/regress/lib/libc/fnmatch/Makefile
new file mode 100644
index 00000000000..b2f357105f0
--- /dev/null
+++ b/regress/lib/libc/fnmatch/Makefile
@@ -0,0 +1,8 @@
+# $OpenBSD: Makefile,v 1.1 2008/10/01 23:04:58 millert Exp $
+
+PROG= fnm_test
+
+run-regress-${PROG}:
+ ./${PROG} ${.CURDIR}/${PROG}.in
+
+.include <bsd.regress.mk>
diff --git a/regress/lib/libc/fnmatch/fnm_test.c b/regress/lib/libc/fnmatch/fnm_test.c
new file mode 100644
index 00000000000..e9870100951
--- /dev/null
+++ b/regress/lib/libc/fnmatch/fnm_test.c
@@ -0,0 +1,45 @@
+/* $OpenBSD: fnm_test.c,v 1.1 2008/10/01 23:04:58 millert Exp $ */
+
+/*
+ * Public domain, 2008, Todd C. Miller <Todd.Miller@courtesan.com>
+ */
+
+#include <err.h>
+#include <fnmatch.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main(int argc, char **argv)
+{
+ FILE *fp = stdin;
+ char pattern[1024], string[1024];
+ int errors = 0, flags, got, want;
+
+ if (argc > 1) {
+ if ((fp = fopen(argv[1], "r")) == NULL)
+ err(1, "%s", argv[1]);
+ }
+
+ /*
+ * Read in test file, which is formatted thusly:
+ *
+ * pattern string flags expected_result
+ *
+ */
+ for (;;) {
+ got = fscanf(fp, "%s %s 0x%x %d\n", pattern, string, &flags,
+ &want);
+ if (got == EOF)
+ break;
+ if (got == 4) {
+ got = fnmatch(pattern, string, flags);
+ if (got != want) {
+ warnx("%s %s %d: want %d, got %d", pattern,
+ string, flags, want, got);
+ errors++;
+ }
+ }
+ }
+ exit(errors);
+}
diff --git a/regress/lib/libc/fnmatch/fnm_test.in b/regress/lib/libc/fnmatch/fnm_test.in
new file mode 100644
index 00000000000..3c707f8a191
--- /dev/null
+++ b/regress/lib/libc/fnmatch/fnm_test.in
@@ -0,0 +1,5 @@
+/bin/[[:alpha:][:alnum:]]* /bin/ls 0x2 0
+/bin/[[:upper:]][[:alnum:]] /bin/ls 0x10 0
+/bin/[[:opper:][:alnum:]]* /bin/ls 0x0 1
+[[:alpha:][:alnum:]]*.c foo1.c 0x4 0
+[[:upper:]]* FOO 0x0 0