From e430506b381d396c123aaef691744cf8bda4368b Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Tue, 20 Sep 2011 23:13:46 +0200 Subject: [PATCH] freopen tests: EBADF tests. * tests/test-freopen.c: Include errno.h, unistd.h. (main): Add tests for EBADF, commented out for the moment. --- ChangeLog | 4 ++++ tests/test-freopen.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/ChangeLog b/ChangeLog index dedd5cb31..21682097c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2011-09-20 Bruno Haible + freopen tests: EBADF tests. + * tests/test-freopen.c: Include errno.h, unistd.h. + (main): Add tests for EBADF, commented out for the moment. + fclose tests: EBADF tests. * tests/test-fclose.c (main): Add tests for EBADF. diff --git a/tests/test-freopen.c b/tests/test-freopen.c index 4c26476c4..cac907c60 100644 --- a/tests/test-freopen.c +++ b/tests/test-freopen.c @@ -23,12 +23,58 @@ #include "signature.h" SIGNATURE_CHECK (freopen, FILE *, (char const *, char const *, FILE *)); +#include +#include + #include "macros.h" int main () { + const char *filename = "test-freopen.txt"; + ASSERT (freopen ("/dev/null", "r", stdin) != NULL); +#if 0 /* freopen (NULL, ...) is unsupported on most platforms. */ + /* Test that freopen() sets errno if someone else closes the stream + fd behind the back of stdio. */ + { + FILE *fp = fopen (filename, "w+"); + ASSERT (fp != NULL); + ASSERT (close (fileno (fp)) == 0); + errno = 0; + ASSERT (freopen (NULL, "r", fp) == NULL); + perror("freopen"); + ASSERT (errno == EBADF); + fclose (fp); + } + + /* Test that freopen() sets errno if the stream was constructed with + an invalid file descriptor. */ + { + FILE *fp = fdopen (-1, "w+"); + if (fp != NULL) + { + errno = 0; + ASSERT (freopen (NULL, "r", fp) == NULL); + ASSERT (errno == EBADF); + fclose (fp); + } + } + { + FILE *fp = fdopen (99, "w+"); + if (fp != NULL) + { + errno = 0; + ASSERT (freopen (NULL, "r", fp) == NULL); + ASSERT (errno == EBADF); + fclose (fp); + } + } +#endif + + /* Clean up. */ + unlink (filename); + return 0; } -- 2.11.0