bad_dup2

bad_dup2 - warnx("passed: fstat fd after dup2...

Info iconThis preview shows pages 1–2. Sign up to view the full content.

View Full Document Right Arrow Icon
/* * Invalid calls to dup2 */ #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <limits.h> #include <errno.h> #include <err.h> #include "config.h" #include "test.h" static void dup2_fd2(int fd, const char *desc) { int rv; rv = dup2(STDIN_FILENO, fd); report_test(rv, errno, EBADF, desc); if (rv != -1) { close(fd); /* just in case */ } } static void dup2_self(void) { struct stat sb; int rv; int testfd; /* use fd that isn't in use */ testfd = CLOSED_FD; rv = dup2(STDIN_FILENO, testfd); if (rv == -1) { warn("UH-OH: couldn't copy stdin"); return; } rv = dup2(testfd, testfd); if (rv == testfd) { warnx("passed: dup2 to same fd"); } else if (rv<0) { warn("FAILURE: dup2 to same fd: error"); } else { warnx("FAILURE: dup2 to same fd: returned %d instead", rv); }
Background image of page 1

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
rv = fstat(testfd, &sb); if (rv==0) {
Background image of page 2
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: warnx(&quot;passed: fstat fd after dup2 to itself&quot;); } else if (errno!=EUNIMP &amp;&amp; errno!=ENOSYS) { warn(&quot;FAILURE: fstat fd after dup2 to itself&quot;); } else { /* no support for fstat; try lseek */ rv = lseek(testfd, 0, SEEK_CUR); if (rv==0 || (rv==-1 &amp;&amp; errno==ESPIPE)) { warnx(&quot;passed: lseek fd after dup2 to itself&quot;); } else { warn(&quot;FAILURE: lseek fd after dup2 to itself&quot;); } } close(testfd); } void test_dup2(void) { /* This does the first fd. */ test_dup2_fd(); /* Any interesting cases added here should also go in common_fds.c */ dup2_fd2(-1, &quot;dup2 to -1&quot;); dup2_fd2(-5, &quot;dup2 to -5&quot;); dup2_fd2(IMPOSSIBLE_FD, &quot;dup2 to impossible fd&quot;); #ifdef OPEN_MAX dup2_fd2(OPEN_MAX, &quot;dup2 to OPEN_MAX&quot;); #else warnx(&quot;Warning: OPEN_MAX not defined - test skipped&quot;); #endif dup2_self(); }...
View Full Document

Page1 / 2

bad_dup2 - warnx(&amp;amp;quot;passed: fstat fd after dup2...

This preview shows document pages 1 - 2. Sign up to view the full document.

View Full Document Right Arrow Icon
Ask a homework question - tutors are online