+
+ /* Test that fflush() sets errno if someone else closes the stream
+ fd behind the back of stdio. */
+ {
+ FILE *fp = fopen ("test-fflush.txt", "w");
+ ASSERT (fp != NULL);
+ fputc ('x', fp);
+ ASSERT (close (fileno (fp)) == 0);
+ errno = 0;
+ ASSERT (fflush (fp) == EOF);
+ ASSERT (errno == EBADF);
+ fclose (fp);
+ }
+
+ /* Test that fflush() sets errno if the stream was constructed with
+ an invalid file descriptor. */
+ {
+ FILE *fp = fdopen (-1, "w");
+ if (fp != NULL)
+ {
+ fputc ('x', fp);
+ errno = 0;
+ ASSERT (fflush (fp) == EOF);
+ ASSERT (errno == EBADF);
+ }
+ }
+ {
+ FILE *fp = fdopen (99, "w");
+ if (fp != NULL)
+ {
+ fputc ('x', fp);
+ errno = 0;
+ ASSERT (fflush (fp) == EOF);
+ ASSERT (errno == EBADF);
+ }
+ }
+
+ /* Clean up. */