ASSERT (errno == EBADF);
ASSERT (lseek (fd, 0, SEEK_CUR) == 2);
-#if GNULIB_FFLUSH
- /* Likewise for an input stream, but only when we know fflush works
- on input streams. */
+ /* Likewise for an input stream. */
fd2 = dup (fd);
ASSERT (0 <= fd2);
f = fdopen (fd2, "r");
ASSERT (lseek (fd2, 0, SEEK_CUR) == -1);
ASSERT (errno == EBADF);
ASSERT (lseek (fd, 0, SEEK_CUR) == 3);
-#endif
/* Test that fclose() sets errno if someone else closes the stream
fd behind the back of stdio. */
- f = fdopen (fd, "w+");
- ASSERT (f);
- ASSERT (close (fd) == 0);
- errno = 0;
- ASSERT (fclose (f) == EOF);
- ASSERT (errno == EBADF);
+ {
+ FILE *fp = fdopen (fd, "w+");
+ ASSERT (fp != NULL);
+ ASSERT (close (fd) == 0);
+ errno = 0;
+ ASSERT (fclose (fp) == EOF);
+ ASSERT (errno == EBADF);
+ }
+
+ /* Test that fclose() sets errno if the stream was constructed with
+ an invalid file descriptor. */
+ {
+ FILE *fp = fdopen (-1, "r");
+ if (fp != NULL)
+ {
+ errno = 0;
+ ASSERT (fclose (fp) == EOF);
+ ASSERT (errno == EBADF);
+ }
+ }
+ {
+ FILE *fp = fdopen (99, "r");
+ if (fp != NULL)
+ {
+ errno = 0;
+ ASSERT (fclose (fp) == EOF);
+ ASSERT (errno == EBADF);
+ }
+ }
/* Clean up. */
ASSERT (remove (BASE) == 0);