Module Name: src Committed By: jmmv Date: Sun Mar 17 04:36:00 UTC 2013
Modified Files: src/tests/lib/libc/c063: t_fexecve.c Log Message: fexecve is not implemented, so mark the test as an expected failure. While doing this, clean this whole thing: do not define a useless cleanup routine and wait for the subprocess to finish instead of using sleep. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/tests/lib/libc/c063/t_fexecve.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/lib/libc/c063/t_fexecve.c diff -u src/tests/lib/libc/c063/t_fexecve.c:1.1 src/tests/lib/libc/c063/t_fexecve.c:1.2 --- src/tests/lib/libc/c063/t_fexecve.c:1.1 Sun Nov 18 17:41:54 2012 +++ src/tests/lib/libc/c063/t_fexecve.c Sun Mar 17 04:35:59 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: t_fexecve.c,v 1.1 2012/11/18 17:41:54 manu Exp $ */ +/* $NetBSD: t_fexecve.c,v 1.2 2013/03/17 04:35:59 jmmv Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -29,48 +29,61 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__RCSID("$NetBSD: t_fexecve.c,v 1.1 2012/11/18 17:41:54 manu Exp $"); +__RCSID("$NetBSD: t_fexecve.c,v 1.2 2013/03/17 04:35:59 jmmv Exp $"); + +#include <sys/wait.h> #include <atf-c.h> +#include <err.h> #include <errno.h> #include <fcntl.h> #include <limits.h> #include <paths.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/param.h> -#define FILE "test" - -ATF_TC_WITH_CLEANUP(fexecve); +ATF_TC(fexecve); ATF_TC_HEAD(fexecve, tc) { atf_tc_set_md_var(tc, "descr", "See that fexecve works"); } - ATF_TC_BODY(fexecve, tc) { - int fd; + int status; pid_t pid; - const char *const argv[] = { "touch", FILE, NULL }; + const char *const argv[] = { "touch", "test", NULL }; const char *const envp[] = { NULL }; ATF_REQUIRE((pid = fork()) != -1); - if (pid != 0) { /* parent */ - sleep(1); - ATF_REQUIRE(access(FILE, F_OK) == 0); - } else { /* child */ - ATF_REQUIRE((fd = open("/usr/bin/touch", O_RDONLY, 0)) != -1); - ATF_REQUIRE(fexecve(fd, __UNCONST(argv), __UNCONST(envp)) == 0); + if (pid == 0) { + int fd; + + if ((fd = open("/usr/bin/touch", O_RDONLY, 0)) == -1) + err(EXIT_FAILURE, "open /usr/bin/touch"); + + if (fexecve(fd, __UNCONST(argv), __UNCONST(envp)) == -1) { + int error; + if (errno == ENOSYS) + error = 76; + else + error = EXIT_FAILURE; + err(error, "fexecve"); + } } -} -ATF_TC_CLEANUP(fexecve, tc) -{ - (void)unlink(FILE); -} + ATF_REQUIRE(waitpid(pid, &status, 0) != -1); + if (!WIFEXITED(status)) + atf_tc_fail("child process did not exit cleanly"); + if (WEXITSTATUS(status) == 76) + atf_tc_expect_fail("fexecve not implemented"); + else + ATF_REQUIRE(WEXITSTATUS(status) == EXIT_SUCCESS); + ATF_REQUIRE(access("test", F_OK) == 0); +} ATF_TP_ADD_TCS(tp) {