X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-freopen.c;h=4b54d8d52888d6f795686da6e5c27d7f132b0435;hb=533101a268dc5015a140ff4695d8eeb04fbe57b6;hp=be30af104242a2d820e1681b08644a656c508b06;hpb=36bde9b7b3c5d8a41015ac2be74488b83d27ed41;p=gnulib.git
diff --git a/tests/test-freopen.c b/tests/test-freopen.c
index be30af104..4b54d8d52 100644
--- a/tests/test-freopen.c
+++ b/tests/test-freopen.c
@@ -1,10 +1,10 @@
/* Test of opening a file stream.
- Copyright (C) 2007 Free Software Foundation, Inc.
+ Copyright (C) 2007-2013 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
+ This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -12,31 +12,71 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+ along with this program. If not, see . */
/* Written by Bruno Haible , 2007. */
#include
#include
-#include
-
-#define ASSERT(expr) \
- do \
- { \
- if (!(expr)) \
- { \
- fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
- abort (); \
- } \
- } \
- while (0)
+
+#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;
+ close (99);
+ 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;
}