2011-09-20 Bruno Haible <bruno@clisp.org>
+ fflush tests: EBADF tests.
+ * tests/test-fflush.c: Include errno.h, macros.h.
+ (main): Add tests for EBADF.
+
ftello tests: EBADF tests.
* tests/test-ftello4.sh: New file.
* tests/test-ftello4.c: New file.
#include "signature.h"
SIGNATURE_CHECK (fflush, int, (FILE *));
+#include <errno.h>
#include <unistd.h>
+#include "macros.h"
+
int
main (void)
{
/* Test fflush. */
f = fopen ("test-fflush.txt", "r");
+ ASSERT (f != NULL);
fd = fileno (f);
if (!f || 0 > fd || fread (buffer, 1, 5, f) != 5)
{
return 1;
}
fclose (f);
+
+ /* 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. */
unlink ("test-fflush.txt");
+
return 0;
}