fdopen-tests: port to Tru64
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 21 Jan 2014 06:12:56 +0000 (22:12 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 21 Jan 2014 06:13:39 +0000 (22:13 -0800)
* tests/test-fdopen.c (main): Don't invoke fdopen on a file
descriptors that is not open, as POSIX doesn't specify the
resulting behavior and the test does not work on Tru64.
Problem reported by Steven M. Schweda in:
http://lists.gnu.org/archive/html/bug-gnulib/2014-01/msg00079.html

ChangeLog
tests/test-fdopen.c

index 6f49920..b0faee4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2014-01-20  Paul Eggert  <eggert@cs.ucla.edu>
 
+       fdopen-tests: port to Tru64
+       * tests/test-fdopen.c (main): Don't invoke fdopen on a file
+       descriptors that is not open, as POSIX doesn't specify the
+       resulting behavior and the test does not work on Tru64.
+       Problem reported by Steven M. Schweda in:
+       http://lists.gnu.org/archive/html/bug-gnulib/2014-01/msg00079.html
+
        stdalign: port to HP-UX compilers
        * lib/stdalign.in.h (_Alignas): Use __attribute__ (__aligned__ (x))
        if __HP_cc or __HP_aCC are nonzero.
index 96a887f..743511e 100644 (file)
@@ -29,28 +29,21 @@ SIGNATURE_CHECK (fdopen, FILE *, (int, const char *));
 int
 main (void)
 {
-  /* Test behaviour for invalid file descriptors.  */
-  {
-    FILE *fp;
-
-    errno = 0;
-    fp = fdopen (-1, "r");
-    if (fp == NULL)
-      ASSERT (errno == EBADF);
-    else
-      fclose (fp);
-  }
-  {
-    FILE *fp;
-
-    close (99);
-    errno = 0;
-    fp = fdopen (99, "r");
-    if (fp == NULL)
-      ASSERT (errno == EBADF);
-    else
-      fclose (fp);
-  }
+  /* Test behavior on failure.  POSIX makes it hard to check for
+     failure, since the behavior is not well-defined on invalid file
+     descriptors, so try fdopen 1000 times and if that's not enough to
+     fail due to EMFILE, so be it.  */
+
+  int i;
+  for (i = 0; i < 1000; i++)
+    {
+      errno = 0;
+      if (! fdopen (STDOUT_FILENO, "w"))
+        {
+          ASSERT (errno != 0);
+          break;
+        }
+    }
 
   return 0;
 }