Author: ngie
Date: Thu Oct 23 06:18:28 2014
New Revision: 273520
URL: https://svnweb.freebsd.org/changeset/base/273520

Log:
  Port t_pipe2.c to FreeBSD
  
  - Omit the pipe2_nosigpipe testcase on FreeBSD (FreeBSD doesn't have
    O_NOSIGPIPE).
  - Convert "fcntl(n, F_CLOSEM)" to "closefrom(n)".
  - Save and restore the resource limit on the number of files (RLIMIT_NOFILE).
  
  In collaboration with: pho
  Sponsored by: EMC / Isilon Storage Division

Modified:
  head/contrib/netbsd-tests/lib/libc/sys/t_pipe2.c

Modified: head/contrib/netbsd-tests/lib/libc/sys/t_pipe2.c
==============================================================================
--- head/contrib/netbsd-tests/lib/libc/sys/t_pipe2.c    Thu Oct 23 06:13:42 
2014        (r273519)
+++ head/contrib/netbsd-tests/lib/libc/sys/t_pipe2.c    Thu Oct 23 06:18:28 
2014        (r273520)
@@ -53,7 +53,11 @@ run(int flags)
        while ((i = open("/", O_RDONLY)) < 3)
                ATF_REQUIRE(i != -1);
 
+#if defined(__FreeBSD__)
+       closefrom(3);
+#else
        ATF_REQUIRE(fcntl(3, F_CLOSEM) != -1);
+#endif
 
        ATF_REQUIRE(pipe2(fd, flags) == 0);
 
@@ -76,6 +80,7 @@ run(int flags)
                ATF_REQUIRE((fcntl(fd[1], F_GETFL) & O_NONBLOCK) == 0);
        }
 
+#if !defined(__FreeBSD__)
        if (flags & O_NOSIGPIPE) {
                ATF_REQUIRE(fcntl(fd[0], F_GETNOSIGPIPE) != 0);
                ATF_REQUIRE(fcntl(fd[1], F_GETNOSIGPIPE) != 0);
@@ -83,6 +88,7 @@ run(int flags)
                ATF_REQUIRE(fcntl(fd[0], F_GETNOSIGPIPE) == 0);
                ATF_REQUIRE(fcntl(fd[1], F_GETNOSIGPIPE) == 0);
        }
+#endif
 
        ATF_REQUIRE(close(fd[0]) != -1);
        ATF_REQUIRE(close(fd[1]) != -1);
@@ -110,9 +116,14 @@ ATF_TC_BODY(pipe2_consume, tc)
 {
        struct rlimit rl;
        int err, filedes[2];
+#if defined(__FreeBSD__)
+       int old;
 
+       closefrom(4);
+#else
        err = fcntl(4, F_CLOSEM);
        ATF_REQUIRE(err == 0);
+#endif
 
        err = getrlimit(RLIMIT_NOFILE, &rl);
        ATF_REQUIRE(err == 0);
@@ -121,12 +132,19 @@ ATF_TC_BODY(pipe2_consume, tc)
         * file descriptor limit in the middle of a pipe2() call - i.e.
         * before the call only a single descriptor may be openend.
         */
+#if defined(__FreeBSD__)
+       old = rl.rlim_cur;
+#endif
        rl.rlim_cur = 4;
        err = setrlimit(RLIMIT_NOFILE, &rl);
        ATF_REQUIRE(err == 0);
 
        err = pipe2(filedes, O_CLOEXEC);
        ATF_REQUIRE(err == -1);
+#if defined(__FreeBSD__)
+       rl.rlim_cur = old;
+       err = setrlimit(RLIMIT_NOFILE, &rl);
+#endif
 }
 
 ATF_TC(pipe2_nonblock);
@@ -151,6 +169,7 @@ ATF_TC_BODY(pipe2_cloexec, tc)
        run(O_CLOEXEC);
 }
 
+#if defined(__NetBSD__)
 ATF_TC(pipe2_nosigpipe);
 ATF_TC_HEAD(pipe2_nosigpipe, tc)
 {
@@ -161,6 +180,7 @@ ATF_TC_BODY(pipe2_nosigpipe, tc)
 {
        run(O_NOSIGPIPE);
 }
+#endif
 
 ATF_TC(pipe2_einval);
 ATF_TC_HEAD(pipe2_einval, tc)
@@ -181,7 +201,9 @@ ATF_TP_ADD_TCS(tp)
        ATF_TP_ADD_TC(tp, pipe2_consume);
        ATF_TP_ADD_TC(tp, pipe2_nonblock);
        ATF_TP_ADD_TC(tp, pipe2_cloexec);
+#if defined(__NetBSD__)
        ATF_TP_ADD_TC(tp, pipe2_nosigpipe);
+#endif
        ATF_TP_ADD_TC(tp, pipe2_einval);
 
        return atf_no_error();
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to