diff options
author | ngie <ngie@FreeBSD.org> | 2015-11-09 06:24:11 +0000 |
---|---|---|
committer | ngie <ngie@FreeBSD.org> | 2015-11-09 06:24:11 +0000 |
commit | 5a54ab5e6790d816f2c3dd53e7662ecc06726dc7 (patch) | |
tree | d6d0b17e61ef93ad2aed62a47158a0357873ff1d /tools | |
parent | d0245e573224c10fd72bff97ced03c3d8cdbff86 (diff) | |
download | FreeBSD-src-5a54ab5e6790d816f2c3dd53e7662ecc06726dc7.zip FreeBSD-src-5a54ab5e6790d816f2c3dd53e7662ecc06726dc7.tar.gz |
Integrate tools/regression/lib/libc/gen into the FreeBSD test suite
as lib/libc/tests/gen
The code in test-fnmatch that was used for generating:
- bin/sh/tests/builtins/case2.0
- bin/sh/tests/builtins/case3.0
has been left undisturbed. The target `make sh-tests` has been moved over
from tools/regression/lib/libc/gen/Makefile to
lib/libc/tests/gen/Makefile and made into a PHONY target
case2.0 and case3.0 test input generation isn't being done automatically.
This needs additional discussion.
MFC after: 1 week
Sponsored by: EMC / Isilon Storage Division
Diffstat (limited to 'tools')
-rw-r--r-- | tools/regression/lib/libc/gen/Makefile | 16 | ||||
-rw-r--r-- | tools/regression/lib/libc/gen/test-fmtcheck.c | 102 | ||||
-rw-r--r-- | tools/regression/lib/libc/gen/test-fmtmsg.c | 251 | ||||
-rw-r--r-- | tools/regression/lib/libc/gen/test-fnmatch.c | 390 | ||||
-rw-r--r-- | tools/regression/lib/libc/gen/test-ftw.c | 143 | ||||
-rw-r--r-- | tools/regression/lib/libc/gen/test-popen.c | 227 | ||||
-rw-r--r-- | tools/regression/lib/libc/gen/test-posix_spawn.c | 90 | ||||
-rw-r--r-- | tools/regression/lib/libc/gen/test-wordexp.c | 271 |
8 files changed, 0 insertions, 1490 deletions
diff --git a/tools/regression/lib/libc/gen/Makefile b/tools/regression/lib/libc/gen/Makefile deleted file mode 100644 index f3a40e3..0000000 --- a/tools/regression/lib/libc/gen/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -# $FreeBSD$ - -TESTS= test-fmtcheck test-fmtmsg test-fnmatch \ - test-ftw test-popen test-posix_spawn test-wordexp - -.PHONY: tests -tests: ${TESTS} - for p in ${TESTS}; do ${.OBJDIR}/$$p; done - -.PHONY: clean -clean: - -rm -f ${TESTS} - -sh-tests: test-fnmatch - ./test-fnmatch -s 1 >../../../bin/sh/builtins/case2.0 - ./test-fnmatch -s 2 >../../../bin/sh/builtins/case3.0 diff --git a/tools/regression/lib/libc/gen/test-fmtcheck.c b/tools/regression/lib/libc/gen/test-fmtcheck.c deleted file mode 100644 index 734eab1..0000000 --- a/tools/regression/lib/libc/gen/test-fmtcheck.c +++ /dev/null @@ -1,102 +0,0 @@ -/* $NetBSD: tfmtcheck.c,v 1.3 2008/04/28 20:23:04 martin Exp $ */ - -/*- - * Copyright (c) 2000 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code was contributed to The NetBSD Foundation by Allen Briggs. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <err.h> -#include <stdio.h> -#include <stdlib.h> - -struct test_fmt { - char *fmt1; - char *fmt2; - int correct; -} test_fmts[] = { - { "%d", "%d", 1 }, - { "%2d", "%2.2d", 1 }, - { "%x", "%d", 1 }, - { "%u", "%d", 1 }, - { "%03d", "%d", 1 }, - { "%-2d", "%d", 1 }, - { "%d", "%-12.1d", 1 }, - { "%d", "%-01.3d", 1 }, - { "%X", "%-01.3d", 1 }, - { "%D", "%ld", 1 }, - { "%s", "%s", 1 }, - { "%s", "This is a %s test", 1 }, - { "Hi, there. This is a %s test", "%s", 1 }, - { "%d", "%s", 2 }, - { "%e", "%s", 2 }, - { "%r", "%d", 2 }, - { "%*.2d", "%*d", 1 }, - { "%2.*d", "%*d", 2 }, - { "%*d", "%*d", 1 }, - { "%-3", "%d", 2 }, - { "%d %s", "%d", 2 }, - { "%*.*.*d", "%*.*.*d", 2 }, - { "%d", "%d %s", 1 }, - { "%40s", "%20s", 1 }, - { "%x %x %x", "%o %u %d", 1 }, - { "%o %u %d", "%x %x %X", 1 }, - { "%#o %u %#-d", "%x %#x %X", 1 }, - { "%qd", "%llx", 1 }, - { "%%", "%llx", 1 }, - { "%p %30s %#llx %-10.*e", "This number %lu%% and string %s has %qd numbers and %.*g floats", 1 }, -}; - -int -main(int argc, char *argv[]) -{ - int i, n, r; - const char *f, *cf, *f1, *f2; - - printf("1..1\n"); - r = 0; - n = sizeof(test_fmts) / sizeof(test_fmts[0]); - for (i=0 ; i<n ; i++) { - f1 = test_fmts[i].fmt1; - f2 = test_fmts[i].fmt2; - f = fmtcheck(f1, f2); - if (test_fmts[i].correct == 1) { - cf = f1; - } else { - cf = f2; - } - if (f != cf) { - r++; - errx(1, "Test %d: (%s) vs. (%s) failed " - "(should have returned %s)", i, f1, f2, - (test_fmts[i].correct == 1) ? "1st" : "2nd"); - } - } - printf("ok 1\n"); - exit(0); -} diff --git a/tools/regression/lib/libc/gen/test-fmtmsg.c b/tools/regression/lib/libc/gen/test-fmtmsg.c deleted file mode 100644 index e5dcc0f..0000000 --- a/tools/regression/lib/libc/gen/test-fmtmsg.c +++ /dev/null @@ -1,251 +0,0 @@ -/*- - * Copyright (c) 2012 Jilles Tjoelker - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/wait.h> - -#include <err.h> -#include <errno.h> -#include <fmtmsg.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -static char *run_test(long classification, const char *label, int severity, - const char *text, const char *action, const char *tag); - -struct testcase { - long classification; - const char *label; - int severity; - const char *text; - const char *action; - const char *tag; - const char *msgverb; - const char *result; -} testcases[] = { - { - MM_UTIL | MM_PRINT, "BSD:ls", MM_ERROR, - "illegal option -- z", "refer to manual", "BSD:ls:001", - NULL, - "BSD:ls: ERROR: illegal option -- z\n" - "TO FIX: refer to manual BSD:ls:001\n" - }, - { - MM_UTIL | MM_PRINT, "BSD:ls", MM_ERROR, - "illegal option -- z", "refer to manual", "BSD:ls:001", - "text:severity:action:tag", - "illegal option -- z: ERROR\n" - "TO FIX: refer to manual BSD:ls:001\n" - }, - { - MM_UTIL | MM_PRINT, "BSD:ls", MM_ERROR, - "illegal option -- z", "refer to manual", "BSD:ls:001", - "text", - "illegal option -- z\n" - }, - { - MM_UTIL | MM_PRINT, "BSD:ls", MM_ERROR, - "illegal option -- z", "refer to manual", "BSD:ls:001", - "severity:text", - "ERROR: illegal option -- z\n" - }, - { - MM_UTIL | MM_PRINT, "BSD:ls", MM_ERROR, - "illegal option -- z", "refer to manual", "BSD:ls:001", - "ignore me", - "BSD:ls: ERROR: illegal option -- z\n" - "TO FIX: refer to manual BSD:ls:001\n" - }, - { - MM_UTIL | MM_PRINT, "BSD:ls", MM_ERROR, - "illegal option -- z", "refer to manual", "BSD:ls:001", - "tag:severity:text:nothing:action", - "BSD:ls: ERROR: illegal option -- z\n" - "TO FIX: refer to manual BSD:ls:001\n" - }, - { - MM_UTIL | MM_PRINT, "BSD:ls", MM_ERROR, - "illegal option -- z", "refer to manual", "BSD:ls:001", - "", - "BSD:ls: ERROR: illegal option -- z\n" - "TO FIX: refer to manual BSD:ls:001\n" - }, - { - MM_UTIL | MM_PRINT, MM_NULLLBL, MM_ERROR, - "illegal option -- z", "refer to manual", "BSD:ls:001", - NULL, - "ERROR: illegal option -- z\n" - "TO FIX: refer to manual BSD:ls:001\n" - }, - { - MM_UTIL | MM_PRINT, "BSD:ls", MM_ERROR, - "illegal option -- z", MM_NULLACT, MM_NULLTAG, - NULL, - "BSD:ls: ERROR: illegal option -- z\n" - }, - { - MM_UTIL | MM_NULLMC, "BSD:ls", MM_ERROR, - "illegal option -- z", "refer to manual", "BSD:ls:001", - NULL, - "" - }, - { - MM_APPL | MM_PRINT, "ABCDEFGHIJ:abcdefghijklmn", MM_INFO, - "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" - "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" - "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" - "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", - "refer to manual", "ABCDEFGHIJ:abcdefghijklmn:001", - NULL, - "ABCDEFGHIJ:abcdefghijklmn: INFO: " - "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" - "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" - "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" - "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" - "TO FIX: refer to manual ABCDEFGHIJ:abcdefghijklmn:001\n" - }, - { - MM_OPSYS | MM_PRINT, "TEST:test", MM_HALT, - "failed", "nothing can help me", "NOTHING", - NULL, - "TEST:test: HALT: failed\n" - "TO FIX: nothing can help me NOTHING\n" - }, - { - MM_OPSYS | MM_PRINT, "TEST:test", MM_WARNING, - "failed", "nothing can help me", "NOTHING", - NULL, - "TEST:test: WARNING: failed\n" - "TO FIX: nothing can help me NOTHING\n" - }, - { - MM_OPSYS | MM_PRINT, "TEST:test", MM_NOSEV, - "failed", "nothing can help me", "NOTHING", - NULL, - "TEST:test: failed\n" - "TO FIX: nothing can help me NOTHING\n" - } -}; - -static char * -run_test(long classification, const char *label, int severity, - const char *text, const char *action, const char *tag) -{ - int pip[2]; - pid_t pid, wpid; - char *result, *p; - size_t resultsize; - ssize_t n; - int status; - - if (pipe(pip) == -1) - err(2, "pipe"); - pid = fork(); - if (pid == -1) - err(2, "fork"); - if (pid == 0) { - close(pip[0]); - if (pip[1] != STDERR_FILENO && - dup2(pip[1], STDERR_FILENO) == -1) - _exit(2); - if (fmtmsg(classification, label, severity, text, action, tag) - != MM_OK) - _exit(1); - else - _exit(0); - } - close(pip[1]); - resultsize = 1024; - result = malloc(resultsize); - p = result; - while ((n = read(pip[0], p, result + resultsize - p - 1)) != 0) { - if (n == -1) { - if (errno == EINTR) - continue; - else - err(2, "read"); - } - p += n; - if (result + resultsize == p - 1) { - resultsize *= 2; - result = realloc(result, resultsize); - if (result == NULL) - err(2, "realloc"); - } - } - if (memchr(result, '\0', p - result) != NULL) { - free(result); - return (NULL); - } - *p = '\0'; - close(pip[0]); - while ((wpid = waitpid(pid, &status, 0)) == -1 && errno == EINTR) - ; - if (wpid == -1) - err(2, "waitpid"); - if (status != 0) { - free(result); - return (NULL); - } - return (result); -} - -int -main(void) -{ - size_t i, n; - int errors; - char *result; - struct testcase *t; - - n = sizeof(testcases) / sizeof(testcases[0]); - errors = 0; - printf("1..%zu\n", n); - for (i = 0; i < n; i++) { - t = &testcases[i]; - if (t->msgverb != NULL) - setenv("MSGVERB", t->msgverb, 1); - else - unsetenv("MSGVERB"); - result = run_test(t->classification, t->label, t->severity, - t->text, t->action, t->tag); - if (result != NULL && strcmp(result, t->result) == 0) - printf("ok %zu - correct\n", - i + 1); - else { - printf("not ok %zu - %s\n", - i + 1, result != NULL ? "incorrect" : "failed"); - errors = 1; - } - free(result); - } - - return (errors); -} diff --git a/tools/regression/lib/libc/gen/test-fnmatch.c b/tools/regression/lib/libc/gen/test-fnmatch.c deleted file mode 100644 index fd33574..0000000 --- a/tools/regression/lib/libc/gen/test-fnmatch.c +++ /dev/null @@ -1,390 +0,0 @@ -/*- - * Copyright (c) 2010 Jilles Tjoelker - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <errno.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <fnmatch.h> - -struct testcase { - const char *pattern; - const char *string; - int flags; - int result; -} testcases[] = { - "", "", 0, 0, - "a", "a", 0, 0, - "a", "b", 0, FNM_NOMATCH, - "a", "A", 0, FNM_NOMATCH, - "*", "a", 0, 0, - "*", "aa", 0, 0, - "*a", "a", 0, 0, - "*a", "b", 0, FNM_NOMATCH, - "*a*", "b", 0, FNM_NOMATCH, - "*a*b*", "ab", 0, 0, - "*a*b*", "qaqbq", 0, 0, - "*a*bb*", "qaqbqbbq", 0, 0, - "*a*bc*", "qaqbqbcq", 0, 0, - "*a*bb*", "qaqbqbb", 0, 0, - "*a*bc*", "qaqbqbc", 0, 0, - "*a*bb", "qaqbqbb", 0, 0, - "*a*bc", "qaqbqbc", 0, 0, - "*a*bb", "qaqbqbbq", 0, FNM_NOMATCH, - "*a*bc", "qaqbqbcq", 0, FNM_NOMATCH, - "*a*a*a*a*a*a*a*a*a*a*", "aaaaaaaaa", 0, FNM_NOMATCH, - "*a*a*a*a*a*a*a*a*a*a*", "aaaaaaaaaa", 0, 0, - "*a*a*a*a*a*a*a*a*a*a*", "aaaaaaaaaaa", 0, 0, - ".*.*.*.*.*.*.*.*.*.*", ".........", 0, FNM_NOMATCH, - ".*.*.*.*.*.*.*.*.*.*", "..........", 0, 0, - ".*.*.*.*.*.*.*.*.*.*", "...........", 0, 0, - "*?*?*?*?*?*?*?*?*?*?*", "123456789", 0, FNM_NOMATCH, - "??????????*", "123456789", 0, FNM_NOMATCH, - "*??????????", "123456789", 0, FNM_NOMATCH, - "*?*?*?*?*?*?*?*?*?*?*", "1234567890", 0, 0, - "??????????*", "1234567890", 0, 0, - "*??????????", "1234567890", 0, 0, - "*?*?*?*?*?*?*?*?*?*?*", "12345678901", 0, 0, - "??????????*", "12345678901", 0, 0, - "*??????????", "12345678901", 0, 0, - "[x]", "x", 0, 0, - "[*]", "*", 0, 0, - "[?]", "?", 0, 0, - "[", "[", 0, 0, - "[[]", "[", 0, 0, - "[[]", "x", 0, FNM_NOMATCH, - "[*]", "", 0, FNM_NOMATCH, - "[*]", "x", 0, FNM_NOMATCH, - "[?]", "x", 0, FNM_NOMATCH, - "*[*]*", "foo*foo", 0, 0, - "*[*]*", "foo", 0, FNM_NOMATCH, - "[0-9]", "0", 0, 0, - "[0-9]", "5", 0, 0, - "[0-9]", "9", 0, 0, - "[0-9]", "/", 0, FNM_NOMATCH, - "[0-9]", ":", 0, FNM_NOMATCH, - "[0-9]", "*", 0, FNM_NOMATCH, - "[!0-9]", "0", 0, FNM_NOMATCH, - "[!0-9]", "5", 0, FNM_NOMATCH, - "[!0-9]", "9", 0, FNM_NOMATCH, - "[!0-9]", "/", 0, 0, - "[!0-9]", ":", 0, 0, - "[!0-9]", "*", 0, 0, - "*[0-9]", "a0", 0, 0, - "*[0-9]", "a5", 0, 0, - "*[0-9]", "a9", 0, 0, - "*[0-9]", "a/", 0, FNM_NOMATCH, - "*[0-9]", "a:", 0, FNM_NOMATCH, - "*[0-9]", "a*", 0, FNM_NOMATCH, - "*[!0-9]", "a0", 0, FNM_NOMATCH, - "*[!0-9]", "a5", 0, FNM_NOMATCH, - "*[!0-9]", "a9", 0, FNM_NOMATCH, - "*[!0-9]", "a/", 0, 0, - "*[!0-9]", "a:", 0, 0, - "*[!0-9]", "a*", 0, 0, - "*[0-9]", "a00", 0, 0, - "*[0-9]", "a55", 0, 0, - "*[0-9]", "a99", 0, 0, - "*[0-9]", "a0a0", 0, 0, - "*[0-9]", "a5a5", 0, 0, - "*[0-9]", "a9a9", 0, 0, - "\\*", "*", 0, 0, - "\\?", "?", 0, 0, - "\\[x]", "[x]", 0, 0, - "\\[", "[", 0, 0, - "\\\\", "\\", 0, 0, - "*\\**", "foo*foo", 0, 0, - "*\\**", "foo", 0, FNM_NOMATCH, - "*\\\\*", "foo\\foo", 0, 0, - "*\\\\*", "foo", 0, FNM_NOMATCH, - "\\(", "(", 0, 0, - "\\a", "a", 0, 0, - "\\*", "a", 0, FNM_NOMATCH, - "\\?", "a", 0, FNM_NOMATCH, - "\\*", "\\*", 0, FNM_NOMATCH, - "\\?", "\\?", 0, FNM_NOMATCH, - "\\[x]", "\\[x]", 0, FNM_NOMATCH, - "\\[x]", "\\x", 0, FNM_NOMATCH, - "\\[", "\\[", 0, FNM_NOMATCH, - "\\(", "\\(", 0, FNM_NOMATCH, - "\\a", "\\a", 0, FNM_NOMATCH, - "\\", "\\", 0, FNM_NOMATCH, - "\\", "", 0, 0, - "\\*", "\\*", FNM_NOESCAPE, 0, - "\\?", "\\?", FNM_NOESCAPE, 0, - "\\", "\\", FNM_NOESCAPE, 0, - "\\\\", "\\", FNM_NOESCAPE, FNM_NOMATCH, - "\\\\", "\\\\", FNM_NOESCAPE, 0, - "*\\*", "foo\\foo", FNM_NOESCAPE, 0, - "*\\*", "foo", FNM_NOESCAPE, FNM_NOMATCH, - "*", ".", FNM_PERIOD, FNM_NOMATCH, - "?", ".", FNM_PERIOD, FNM_NOMATCH, - ".*", ".", 0, 0, - ".*", "..", 0, 0, - ".*", ".a", 0, 0, - "[0-9]", ".", FNM_PERIOD, FNM_NOMATCH, - "a*", "a.", 0, 0, - "a/a", "a/a", FNM_PATHNAME, 0, - "a/*", "a/a", FNM_PATHNAME, 0, - "*/a", "a/a", FNM_PATHNAME, 0, - "*/*", "a/a", FNM_PATHNAME, 0, - "a*b/*", "abbb/x", FNM_PATHNAME, 0, - "a*b/*", "abbb/.x", FNM_PATHNAME, 0, - "*", "a/a", FNM_PATHNAME, FNM_NOMATCH, - "*/*", "a/a/a", FNM_PATHNAME, FNM_NOMATCH, - "b/*", "b/.x", FNM_PATHNAME | FNM_PERIOD, FNM_NOMATCH, - "b*/*", "a/.x", FNM_PATHNAME | FNM_PERIOD, FNM_NOMATCH, - "b/.*", "b/.x", FNM_PATHNAME | FNM_PERIOD, 0, - "b*/.*", "b/.x", FNM_PATHNAME | FNM_PERIOD, 0, - "a", "A", FNM_CASEFOLD, 0, - "A", "a", FNM_CASEFOLD, 0, - "[a]", "A", FNM_CASEFOLD, 0, - "[A]", "a", FNM_CASEFOLD, 0, - "a", "b", FNM_CASEFOLD, FNM_NOMATCH, - "a", "a/b", FNM_PATHNAME, FNM_NOMATCH, - "*", "a/b", FNM_PATHNAME, FNM_NOMATCH, - "*b", "a/b", FNM_PATHNAME, FNM_NOMATCH, - "a", "a/b", FNM_PATHNAME | FNM_LEADING_DIR, 0, - "*", "a/b", FNM_PATHNAME | FNM_LEADING_DIR, 0, - "*", ".a/b", FNM_PATHNAME | FNM_LEADING_DIR, 0, - "*a", ".a/b", FNM_PATHNAME | FNM_LEADING_DIR, 0, - "*", ".a/b", FNM_PATHNAME | FNM_PERIOD | FNM_LEADING_DIR, FNM_NOMATCH, - "*a", ".a/b", FNM_PATHNAME | FNM_PERIOD | FNM_LEADING_DIR, FNM_NOMATCH, - "a*b/*", "abbb/.x", FNM_PATHNAME | FNM_PERIOD, FNM_NOMATCH, -}; - -static const char * -flags_to_string(int flags) -{ - static const int flagvalues[] = { FNM_NOESCAPE, FNM_PATHNAME, - FNM_PERIOD, FNM_LEADING_DIR, FNM_CASEFOLD, 0 }; - static const char flagnames[] = "FNM_NOESCAPE\0FNM_PATHNAME\0FNM_PERIOD\0FNM_LEADING_DIR\0FNM_CASEFOLD\0"; - static char result[sizeof(flagnames) + 3 * sizeof(int) + 2]; - char *p; - size_t i, len; - const char *fp; - - p = result; - fp = flagnames; - for (i = 0; flagvalues[i] != 0; i++) { - len = strlen(fp); - if (flags & flagvalues[i]) { - if (p != result) - *p++ = '|'; - memcpy(p, fp, len); - p += len; - flags &= ~flagvalues[i]; - } - fp += len + 1; - } - if (p == result) - memcpy(p, "0", 2); - else if (flags != 0) - sprintf(p, "%d", flags); - else - *p = '\0'; - return result; -} - -static int -write_sh_tests(const char *progname, int num) -{ - size_t i, n; - struct testcase *t; - - printf("# Generated by %s -s %d, do not edit.\n", progname, num); - printf("# $" "FreeBSD$\n"); - printf("failures=\n"); - printf("failed() { printf '%%s\\n' \"Failed: $1 '$2' '$3'\"; failures=x$failures; }\n"); - if (num == 1) { - printf("testmatch() { eval \"case \\$2 in ''$1) ;; *) failed testmatch \\\"\\$@\\\";; esac\"; }\n"); - printf("testnomatch() { eval \"case \\$2 in ''$1) failed testnomatch \\\"\\$@\\\";; esac\"; }\n"); - } else if (num == 2) { - printf("# We do not treat a backslash specially in this case,\n"); - printf("# but this is not the case in all shells.\n"); - printf("netestmatch() { case $2 in $1) ;; *) failed netestmatch \"$@\";; esac; }\n"); - printf("netestnomatch() { case $2 in $1) failed netestnomatch \"$@\";; esac; }\n"); - } - n = sizeof(testcases) / sizeof(testcases[0]); - for (i = 0; i < n; i++) { - t = &testcases[i]; - if (strchr(t->pattern, '\'') != NULL || - strchr(t->string, '\'') != NULL) - continue; - if (t->flags == 0 && strcmp(t->pattern, "\\") == 0) - continue; - if (num == 1 && t->flags == 0) - printf("test%smatch '%s' '%s'\n", - t->result == FNM_NOMATCH ? "no" : "", - t->pattern, t->string); - if (num == 2 && (t->flags == FNM_NOESCAPE || - (t->flags == 0 && strchr(t->pattern, '\\') == NULL))) - printf("netest%smatch '%s' '%s'\n", - t->result == FNM_NOMATCH ? "no" : "", - t->pattern, t->string); - } - printf("[ -z \"$failures\" ]\n"); - return 0; -} - -int -main(int argc, char *argv[]) -{ - size_t i, n; - int opt, flags, result, extra, errors; - struct testcase *t; - - while ((opt = getopt(argc, argv, "s:")) != -1) { - switch (opt) { - case 's': - return (write_sh_tests(argv[0], atoi(optarg))); - default: - fprintf(stderr, "usage: %s [-s num]\n", argv[0]); - fprintf(stderr, "-s option writes tests for sh(1), num is 1 or 2\n"); - exit(1); - } - } - n = sizeof(testcases) / sizeof(testcases[0]); - errors = 0; - printf("1..%zu\n", n); - for (i = 0; i < n; i++) { - t = &testcases[i]; - flags = t->flags; - extra = 0; - do { - result = fnmatch(t->pattern, t->string, flags); - if (result != t->result) - break; - if (strchr(t->pattern, '\\') == NULL && - !(flags & FNM_NOESCAPE)) { - flags |= FNM_NOESCAPE; - result = fnmatch(t->pattern, t->string, flags); - if (result != t->result) - break; - flags = t->flags; - extra++; - } - if (strchr(t->pattern, '\\') != NULL && - strchr(t->string, '\\') == NULL && - t->result == FNM_NOMATCH && - !(flags & (FNM_NOESCAPE | FNM_LEADING_DIR))) { - flags |= FNM_NOESCAPE; - result = fnmatch(t->pattern, t->string, flags); - if (result != t->result) - break; - flags = t->flags; - extra++; - } - if ((t->string[0] != '.' || t->pattern[0] == '.' || - t->result == FNM_NOMATCH) && - !(flags & (FNM_PATHNAME | FNM_PERIOD))) { - flags |= FNM_PERIOD; - result = fnmatch(t->pattern, t->string, flags); - if (result != t->result) - break; - flags = t->flags; - extra++; - } - if ((strchr(t->string, '/') == NULL || - t->result == FNM_NOMATCH) && - !(flags & FNM_PATHNAME)) { - flags |= FNM_PATHNAME; - result = fnmatch(t->pattern, t->string, flags); - if (result != t->result) - break; - flags = t->flags; - extra++; - } - if ((((t->string[0] != '.' || t->pattern[0] == '.') && - strstr(t->string, "/.") == NULL) || - t->result == FNM_NOMATCH) && - flags & FNM_PATHNAME && !(flags & FNM_PERIOD)) { - flags |= FNM_PERIOD; - result = fnmatch(t->pattern, t->string, flags); - if (result != t->result) - break; - flags = t->flags; - extra++; - } - if ((((t->string[0] != '.' || t->pattern[0] == '.') && - strchr(t->string, '/') == NULL) || - t->result == FNM_NOMATCH) && - !(flags & (FNM_PATHNAME | FNM_PERIOD))) { - flags |= FNM_PATHNAME | FNM_PERIOD; - result = fnmatch(t->pattern, t->string, flags); - if (result != t->result) - break; - flags = t->flags; - extra++; - } - if ((strchr(t->string, '/') == NULL || t->result == 0) - && !(flags & FNM_LEADING_DIR)) { - flags |= FNM_LEADING_DIR; - result = fnmatch(t->pattern, t->string, flags); - if (result != t->result) - break; - flags = t->flags; - extra++; - } - if (t->result == 0 && !(flags & FNM_CASEFOLD)) { - flags |= FNM_CASEFOLD; - result = fnmatch(t->pattern, t->string, flags); - if (result != t->result) - break; - flags = t->flags; - extra++; - } - if (strchr(t->pattern, '\\') == NULL && - t->result == 0 && - !(flags & (FNM_NOESCAPE | FNM_CASEFOLD))) { - flags |= FNM_NOESCAPE | FNM_CASEFOLD; - result = fnmatch(t->pattern, t->string, flags); - if (result != t->result) - break; - flags = t->flags; - extra++; - } - } while (0); - if (result == t->result) - printf("ok %zu - fnmatch(\"%s\", \"%s\", %s) = %d (+%d)\n", - i + 1, t->pattern, t->string, - flags_to_string(flags), - result, extra); - else { - printf("not ok %zu - fnmatch(\"%s\", \"%s\", %s) = %d != %d\n", - i + 1, t->pattern, t->string, - flags_to_string(flags), - result, t->result); - errors = 1; - } - } - - return (errors); -} diff --git a/tools/regression/lib/libc/gen/test-ftw.c b/tools/regression/lib/libc/gen/test-ftw.c deleted file mode 100644 index 209f033..0000000 --- a/tools/regression/lib/libc/gen/test-ftw.c +++ /dev/null @@ -1,143 +0,0 @@ -/*- - * Copyright (c) 2012 Jilles Tjoelker - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Limited test program for nftw() as specified by IEEE Std. 1003.1-2008. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/wait.h> - -#include <assert.h> -#include <err.h> -#include <errno.h> -#include <fcntl.h> -#include <ftw.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <spawn.h> -#include <unistd.h> - -extern char **environ; - -static char dir[] = "/tmp/testftw.XXXXXXXXXX"; -static int failures; -static int ftwflags; - -static void -cleanup(int ustatus __unused) -{ - int error, status; - pid_t pid, waitres; - const char *myargs[5]; - - err_set_exit(NULL); - myargs[0] = "rm"; - myargs[1] = "-rf"; - myargs[2] = "--"; - myargs[3] = dir; - myargs[4] = NULL; - error = posix_spawnp(&pid, myargs[0], NULL, NULL, - __DECONST(char **, myargs), environ); - if (error != 0) - warn("posix_spawnp rm"); - else { - waitres = waitpid(pid, &status, 0); - if (waitres != pid) - warnx("waitpid rm failed"); - else if (status != 0) - warnx("rm failed"); - } -} - -static int -cb(const char *path, const struct stat *st, int type, struct FTW *f) -{ - - switch (type) { - case FTW_D: - if ((ftwflags & FTW_DEPTH) == 0) - return (0); - break; - case FTW_DP: - if ((ftwflags & FTW_DEPTH) != 0) - return (0); - break; - case FTW_SL: - if ((ftwflags & FTW_PHYS) != 0) - return (0); - break; - } - warnx("unexpected path=%s type=%d f.level=%d\n", - path, type, f->level); - failures++; - return (0); -} - -int -main(int argc, char *argv[]) -{ - int fd; - - if (!mkdtemp(dir)) - err(2, "mkdtemp"); - - err_set_exit(cleanup); - - fd = open(dir, O_DIRECTORY | O_RDONLY); - if (fd == -1) - err(2, "open %s", dir); - - if (mkdirat(fd, "d1", 0777) == -1) - err(2, "mkdirat d1"); - - if (symlinkat(dir, fd, "d1/looper") == -1) - err(2, "symlinkat looper"); - - ftwflags = FTW_PHYS; - if (nftw(dir, cb, 10, ftwflags) == -1) - err(2, "nftw FTW_PHYS"); - ftwflags = FTW_PHYS | FTW_DEPTH; - if (nftw(dir, cb, 10, ftwflags) == -1) - err(2, "nftw FTW_PHYS | FTW_DEPTH"); - ftwflags = 0; - if (nftw(dir, cb, 10, ftwflags) == -1) - err(2, "nftw 0"); - ftwflags = FTW_DEPTH; - if (nftw(dir, cb, 10, ftwflags) == -1) - err(2, "nftw FTW_DEPTH"); - - close(fd); - - printf("PASS nftw()\n"); - - cleanup(failures != 0); - - return (failures != 0); -} diff --git a/tools/regression/lib/libc/gen/test-popen.c b/tools/regression/lib/libc/gen/test-popen.c deleted file mode 100644 index bf301d2..0000000 --- a/tools/regression/lib/libc/gen/test-popen.c +++ /dev/null @@ -1,227 +0,0 @@ -/*- - * Copyright (c) 2013 Jilles Tjoelker - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Limited test program for popen() as specified by IEEE Std. 1003.1-2008, - * with BSD extensions. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/wait.h> - -#include <assert.h> -#include <errno.h> -#include <fcntl.h> -#include <signal.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -static int failures; -static volatile sig_atomic_t got_sigpipe; - -static void -sigpipe_handler(int sig __unused) -{ - got_sigpipe = 1; -} - -static void -check_cloexec(FILE *fp, const char *mode) -{ - int flags; - - flags = fcntl(fileno(fp), F_GETFD); - if (flags == -1) - fprintf(stderr, "fcntl(F_GETFD) failed\n"), failures++; - else if ((flags & FD_CLOEXEC) != - (strchr(mode, 'e') != NULL ? FD_CLOEXEC : 0)) - fprintf(stderr, "Bad cloexec flag\n"), failures++; -} - -int -main(int argc, char *argv[]) -{ - FILE *fp, *fp2; - int i, j, status; - const char *mode; - const char *allmodes[] = { "r", "w", "r+", "re", "we", "r+e", "re+" }; - const char *rmodes[] = { "r", "r+", "re", "r+e", "re+" }; - const char *wmodes[] = { "w", "r+", "we", "r+e", "re+" }; - const char *rwmodes[] = { "r+", "r+e", "re+" }; - char buf[80]; - struct sigaction act, oact; - - for (i = 0; i < sizeof(allmodes) / sizeof(allmodes[0]); i++) { - mode = allmodes[i]; - fp = popen("exit 7", mode); - if (fp == NULL) { - fprintf(stderr, "popen(, \"%s\") failed", mode); - failures++; - continue; - } - check_cloexec(fp, mode); - status = pclose(fp); - if (!WIFEXITED(status) || WEXITSTATUS(status) != 7) - fprintf(stderr, "Bad exit status (no I/O)\n"), failures++; - } - - for (i = 0; i < sizeof(rmodes) / sizeof(rmodes[0]); i++) { - mode = rmodes[i]; - fp = popen("exit 9", mode); - if (fp == NULL) { - fprintf(stderr, "popen(, \"%s\") failed", mode); - failures++; - continue; - } - check_cloexec(fp, mode); - if (fgetc(fp) != EOF || !feof(fp) || ferror(fp)) - fprintf(stderr, "Input error 1\n"), failures++; - status = pclose(fp); - if (!WIFEXITED(status) || WEXITSTATUS(status) != 9) - fprintf(stderr, "Bad exit status (input)\n"), failures++; - } - - for (i = 0; i < sizeof(rmodes) / sizeof(rmodes[0]); i++) { - mode = rmodes[i]; - fp = popen("echo hi there", mode); - if (fp == NULL) { - fprintf(stderr, "popen(, \"%s\") failed", mode); - failures++; - continue; - } - check_cloexec(fp, mode); - if (fgets(buf, sizeof(buf), fp) == NULL) - fprintf(stderr, "Input error 2\n"), failures++; - else if (strcmp(buf, "hi there\n") != 0) - fprintf(stderr, "Bad input 1\n"), failures++; - status = pclose(fp); - if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) - fprintf(stderr, "Bad exit status (input)\n"), failures++; - } - - for (i = 0; i < sizeof(wmodes) / sizeof(wmodes[0]); i++) { - mode = wmodes[i]; - fp = popen("read x && [ \"$x\" = abcd ]", mode); - if (fp == NULL) { - fprintf(stderr, "popen(, \"%s\") failed", mode); - failures++; - continue; - } - check_cloexec(fp, mode); - if (fputs("abcd\n", fp) == EOF) - fprintf(stderr, "Output error 1\n"), failures++; - status = pclose(fp); - if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) - fprintf(stderr, "Bad exit status (output)\n"), failures++; - } - - act.sa_handler = sigpipe_handler; - act.sa_flags = SA_RESTART; - sigemptyset(&act.sa_mask); - if (sigaction(SIGPIPE, &act, &oact) == -1) - fprintf(stderr, "sigaction() failed\n"), failures++; - for (i = 0; i < sizeof(wmodes) / sizeof(wmodes[0]); i++) { - mode = wmodes[i]; - fp = popen("exit 88", mode); - if (fp == NULL) { - fprintf(stderr, "popen(, \"%s\") failed", mode); - failures++; - continue; - } - check_cloexec(fp, mode); - got_sigpipe = 0; - while (fputs("abcd\n", fp) != EOF) - ; - if (!ferror(fp) || errno != EPIPE) - fprintf(stderr, "Expected EPIPE\n"), failures++; - if (!got_sigpipe) - fprintf(stderr, "Expected SIGPIPE\n"), failures++; - status = pclose(fp); - if (!WIFEXITED(status) || WEXITSTATUS(status) != 88) - fprintf(stderr, "Bad exit status (EPIPE)\n"), failures++; - } - if (sigaction(SIGPIPE, &oact, NULL) == -1) - fprintf(stderr, "sigaction() failed\n"), failures++; - - for (i = 0; i < sizeof(rwmodes) / sizeof(rwmodes[0]); i++) { - mode = rwmodes[i]; - fp = popen("read x && printf '%s\\n' \"Q${x#a}\"", mode); - if (fp == NULL) { - fprintf(stderr, "popen(, \"%s\") failed", mode); - failures++; - continue; - } - check_cloexec(fp, mode); - if (fputs("abcd\n", fp) == EOF) - fprintf(stderr, "Output error 2\n"), failures++; - if (fgets(buf, sizeof(buf), fp) == NULL) - fprintf(stderr, "Input error 3\n"), failures++; - else if (strcmp(buf, "Qbcd\n") != 0) - fprintf(stderr, "Bad input 2\n"), failures++; - status = pclose(fp); - if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) - fprintf(stderr, "Bad exit status (I/O)\n"), failures++; - } - - for (i = 0; i < sizeof(wmodes) / sizeof(wmodes[0]); i++) { - for (j = 0; j < sizeof(wmodes) / sizeof(wmodes[0]); j++) { - mode = wmodes[i]; - fp = popen("read x", mode); - if (fp == NULL) { - fprintf(stderr, "popen(, \"%s\") failed", mode); - failures++; - continue; - } - mode = wmodes[j]; - fp2 = popen("read x", mode); - if (fp2 == NULL) { - fprintf(stderr, "popen(, \"%s\") failed", mode); - failures++; - pclose(fp); - continue; - } - /* If fp2 inherits fp's pipe, we will deadlock here. */ - status = pclose(fp); - if (!WIFEXITED(status) || WEXITSTATUS(status) != 1) { - fprintf(stderr, "Bad exit status (2 pipes)\n"); - failures++; - } - status = pclose(fp2); - if (!WIFEXITED(status) || WEXITSTATUS(status) != 1) { - fprintf(stderr, "Bad exit status (2 pipes)\n"); - failures++; - } - } - } - - if (failures == 0) - printf("PASS popen()\n"); - - return (failures != 0); -} diff --git a/tools/regression/lib/libc/gen/test-posix_spawn.c b/tools/regression/lib/libc/gen/test-posix_spawn.c deleted file mode 100644 index f1b8d43..0000000 --- a/tools/regression/lib/libc/gen/test-posix_spawn.c +++ /dev/null @@ -1,90 +0,0 @@ -/*- - * Copyright (c) 2011 Jilles Tjoelker - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Test program for posix_spawn() and posix_spawnp() as specified by - * IEEE Std. 1003.1-2008. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/wait.h> - -#include <assert.h> -#include <errno.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <spawn.h> - -int -main(int argc, char *argv[]) -{ - int error, status; - pid_t pid, waitres; - char *myargs[4]; - char *myenv[2] = { "answer=42", NULL }; - - /* Make sure we have no child processes. */ - while (waitpid(-1, NULL, 0) != -1) - ; - assert(errno == ECHILD); - - /* Simple test. */ - myargs[0] = "sh"; - myargs[1] = "-c"; - myargs[2] = "exit $answer"; - myargs[3] = NULL; - error = posix_spawnp(&pid, myargs[0], NULL, NULL, myargs, myenv); - assert(error == 0); - waitres = waitpid(pid, &status, 0); - assert(waitres == pid); - assert(WIFEXITED(status) && WEXITSTATUS(status) == 42); - - /* - * If the executable does not exist, the function shall either fail - * and not create a child process or succeed and create a child - * process that exits with status 127. - */ - myargs[0] = "/var/empty/nonexistent"; - myargs[1] = NULL; - error = posix_spawn(&pid, myargs[0], NULL, NULL, myargs, myenv); - if (error == 0) { - waitres = waitpid(pid, &status, 0); - assert(waitres == pid); - assert(WIFEXITED(status) && WEXITSTATUS(status) == 127); - } else { - assert(error == ENOENT); - waitres = waitpid(-1, NULL, 0); - assert(waitres == -1 && errno == ECHILD); - } - - printf("PASS posix_spawn()\n"); - printf("PASS posix_spawnp()\n"); - - return (0); -} diff --git a/tools/regression/lib/libc/gen/test-wordexp.c b/tools/regression/lib/libc/gen/test-wordexp.c deleted file mode 100644 index 68b1578..0000000 --- a/tools/regression/lib/libc/gen/test-wordexp.c +++ /dev/null @@ -1,271 +0,0 @@ -/*- - * Copyright (c) 2003 Tim J. Robbins - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Test program for wordexp() and wordfree() as specified by - * IEEE Std. 1003.1-2001. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/wait.h> - -#include <assert.h> -#include <errno.h> -#include <signal.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <wordexp.h> - -static void -chld_handler(int x) -{ - int status, serrno; - - (void)x; - serrno = errno; - while (waitpid(-1, &status, WNOHANG) > 0) - ; - errno = serrno; -} - -int -main(int argc, char *argv[]) -{ - struct sigaction sa; - wordexp_t we; - int r; - int i; - char longdata[6 * 10000 + 1]; - - /* Test that the macros are there. */ - (void)(WRDE_APPEND + WRDE_DOOFFS + WRDE_NOCMD + WRDE_REUSE + - WRDE_SHOWERR + WRDE_UNDEF); - (void)(WRDE_BADCHAR + WRDE_BADVAL + WRDE_CMDSUB + WRDE_NOSPACE + - WRDE_SYNTAX); - - /* Simple test. */ - r = wordexp("hello world", &we, 0); - assert(r == 0); - assert(we.we_wordc == 2); - assert(strcmp(we.we_wordv[0], "hello") == 0); - assert(strcmp(we.we_wordv[1], "world") == 0); - assert(we.we_wordv[2] == NULL); - wordfree(&we); - - /* Long output. */ - for (i = 0; i < 10000; i++) - snprintf(longdata + 6 * i, 7, "%05d ", i); - r = wordexp(longdata, &we, 0); - assert(r == 0); - assert(we.we_wordc == 10000); - assert(we.we_wordv[10000] == NULL); - wordfree(&we); - - /* WRDE_DOOFFS */ - we.we_offs = 3; - r = wordexp("hello world", &we, WRDE_DOOFFS); - assert(r == 0); - assert(we.we_wordc == 2); - assert(we.we_wordv[0] == NULL); - assert(we.we_wordv[1] == NULL); - assert(we.we_wordv[2] == NULL); - assert(strcmp(we.we_wordv[3], "hello") == 0); - assert(strcmp(we.we_wordv[4], "world") == 0); - assert(we.we_wordv[5] == NULL); - wordfree(&we); - - /* WRDE_REUSE */ - r = wordexp("hello world", &we, 0); - r = wordexp("hello world", &we, WRDE_REUSE); - assert(r == 0); - assert(we.we_wordc == 2); - assert(strcmp(we.we_wordv[0], "hello") == 0); - assert(strcmp(we.we_wordv[1], "world") == 0); - assert(we.we_wordv[2] == NULL); - wordfree(&we); - - /* WRDE_APPEND */ - r = wordexp("this is", &we, 0); - assert(r == 0); - r = wordexp("a test", &we, WRDE_APPEND); - assert(r == 0); - assert(we.we_wordc == 4); - assert(strcmp(we.we_wordv[0], "this") == 0); - assert(strcmp(we.we_wordv[1], "is") == 0); - assert(strcmp(we.we_wordv[2], "a") == 0); - assert(strcmp(we.we_wordv[3], "test") == 0); - assert(we.we_wordv[4] == NULL); - wordfree(&we); - - /* WRDE_DOOFFS + WRDE_APPEND */ - we.we_offs = 2; - r = wordexp("this is", &we, WRDE_DOOFFS); - assert(r == 0); - r = wordexp("a test", &we, WRDE_APPEND|WRDE_DOOFFS); - assert(r == 0); - r = wordexp("of wordexp", &we, WRDE_APPEND|WRDE_DOOFFS); - assert(r == 0); - assert(we.we_wordc == 6); - assert(we.we_wordv[0] == NULL); - assert(we.we_wordv[1] == NULL); - assert(strcmp(we.we_wordv[2], "this") == 0); - assert(strcmp(we.we_wordv[3], "is") == 0); - assert(strcmp(we.we_wordv[4], "a") == 0); - assert(strcmp(we.we_wordv[5], "test") == 0); - assert(strcmp(we.we_wordv[6], "of") == 0); - assert(strcmp(we.we_wordv[7], "wordexp") == 0); - assert(we.we_wordv[8] == NULL); - wordfree(&we); - - /* WRDE_UNDEF */ - r = wordexp("${dont_set_me}", &we, WRDE_UNDEF); - assert(r == WRDE_BADVAL); - - /* WRDE_NOCMD */ - r = wordexp("`date`", &we, WRDE_NOCMD); - assert(r == WRDE_CMDSUB); - r = wordexp("\"`date`\"", &we, WRDE_NOCMD); - assert(r == WRDE_CMDSUB); - r = wordexp("$(date)", &we, WRDE_NOCMD); - assert(r == WRDE_CMDSUB); - r = wordexp("\"$(date)\"", &we, WRDE_NOCMD); - assert(r == WRDE_CMDSUB); - r = wordexp("$((3+5))", &we, WRDE_NOCMD); - assert(r == 0); - r = wordexp("\\$\\(date\\)", &we, WRDE_NOCMD|WRDE_REUSE); - assert(r == 0); - r = wordexp("'`date`'", &we, WRDE_NOCMD|WRDE_REUSE); - assert(r == 0); - r = wordexp("'$(date)'", &we, WRDE_NOCMD|WRDE_REUSE); - assert(r == 0); - wordfree(&we); - - /* WRDE_BADCHAR */ - r = wordexp("'\n|&;<>(){}'", &we, 0); - assert(r == 0); - r = wordexp("\"\n|&;<>(){}\"", &we, WRDE_REUSE); - assert(r == 0); - r = wordexp("\\\n\\|\\&\\;\\<\\>\\(\\)\\{\\}", &we, WRDE_REUSE); - assert(r == 0); - wordfree(&we); - r = wordexp("test \n test", &we, 0); - assert(r == WRDE_BADCHAR); - r = wordexp("test | test", &we, 0); - assert(r == WRDE_BADCHAR); - r = wordexp("test & test", &we, 0); - assert(r == WRDE_BADCHAR); - r = wordexp("test ; test", &we, 0); - assert(r == WRDE_BADCHAR); - r = wordexp("test > test", &we, 0); - assert(r == WRDE_BADCHAR); - r = wordexp("test < test", &we, 0); - assert(r == WRDE_BADCHAR); - r = wordexp("test ( test", &we, 0); - assert(r == WRDE_BADCHAR); - r = wordexp("test ) test", &we, 0); - assert(r == WRDE_BADCHAR); - r = wordexp("test { test", &we, 0); - assert(r == WRDE_BADCHAR); - r = wordexp("test } test", &we, 0); - assert(r == WRDE_BADCHAR); - - /* WRDE_SYNTAX */ - r = wordexp("'", &we, 0); - assert(r == WRDE_SYNTAX); - r = wordexp("'", &we, WRDE_UNDEF); - assert(r == WRDE_SYNTAX); - r = wordexp("'\\'", &we, 0); - assert(r == 0); - assert(we.we_wordc == 1); - assert(strcmp(we.we_wordv[0], "\\") == 0); - assert(we.we_wordv[1] == NULL); - wordfree(&we); - /* Two syntax errors that are not detected by the current we_check(). */ - r = wordexp("${IFS:+'}", &we, 0); - assert(r == WRDE_SYNTAX); - r = wordexp("${IFS:+'}", &we, WRDE_UNDEF); - assert(r == WRDE_SYNTAX); - r = wordexp("$(case)", &we, 0); - assert(r == WRDE_SYNTAX); - r = wordexp("$(case)", &we, WRDE_UNDEF); - assert(r == WRDE_SYNTAX); - - /* With a SIGCHLD handler that reaps all zombies. */ - sa.sa_flags = 0; - sigemptyset(&sa.sa_mask); - sa.sa_handler = chld_handler; - r = sigaction(SIGCHLD, &sa, NULL); - assert(r == 0); - r = wordexp("hello world", &we, 0); - assert(r == 0); - assert(we.we_wordc == 2); - assert(strcmp(we.we_wordv[0], "hello") == 0); - assert(strcmp(we.we_wordv[1], "world") == 0); - assert(we.we_wordv[2] == NULL); - wordfree(&we); - sa.sa_handler = SIG_DFL; - r = sigaction(SIGCHLD, &sa, NULL); - assert(r == 0); - - /* - * With IFS set to a non-default value (without depending on whether - * IFS is inherited or not). - */ - r = setenv("IFS", ":", 1); - assert(r == 0); - r = wordexp("hello world", &we, 0); - assert(r == 0); - assert(we.we_wordc == 2); - assert(strcmp(we.we_wordv[0], "hello") == 0); - assert(strcmp(we.we_wordv[1], "world") == 0); - assert(we.we_wordv[2] == NULL); - wordfree(&we); - r = unsetenv("IFS"); - assert(r == 0); - - /* - * With IFS set to a non-default value, and using it. - */ - r = setenv("IFS", ":", 1); - assert(r == 0); - r = wordexp("${IFS+hello:world}", &we, 0); - assert(r == 0); - assert(we.we_wordc == 2); - assert(strcmp(we.we_wordv[0], "hello") == 0); - assert(strcmp(we.we_wordv[1], "world") == 0); - assert(we.we_wordv[2] == NULL); - wordfree(&we); - r = unsetenv("IFS"); - assert(r == 0); - - printf("PASS wordexp()\n"); - printf("PASS wordfree()\n"); - - return (0); -} |