/* Test if dup3 returns EBADF for bad fds. * by Richard W.M. Jones. */ #define _GNU_SOURCE #include #include #include #include #include #include #include int main () { char *file = "/dev/null"; int fd = open (file, O_RDONLY); int r, errors = 0; assert (fd >= 0); r = dup3 (fd, -2, 0); if (r != -1 || errno != EBADF) { fprintf (stderr, "failed: dup3 (fd, -2, 0) => %d, errno = %d (%s)\n", r, errno, strerror (errno)); errors++; } r = dup3 (fd, 1000000, 0); if (r != -1 || errno != EBADF) { fprintf (stderr, "failed: dup3 (fd, 1000000, 0) => %d, errno = %d (%s)\n", r, errno, strerror (errno)); errors++; } /* Also test dup2 */ r = dup2 (fd, -2); if (r != -1 || errno != EBADF) { fprintf (stderr, "failed: dup2 (fd, -2) => %d, errno = %d (%s)\n", r, errno, strerror (errno)); errors++; } r = dup2 (fd, 1000000); if (r != -1 || errno != EBADF) { fprintf (stderr, "failed: dup2 (fd, 1000000) => %d, errno = %d (%s)\n", r, errno, strerror (errno)); errors++; } exit (errors == 0 ? EXIT_SUCCESS : EXIT_FAILURE); }