From 0a31135d110ced0f330e510c097107fcc13d55d1 Mon Sep 17 00:00:00 2001 From: Colin Percival Date: Sun, 4 Jul 2004 20:17:00 +0000 Subject: [PATCH] Add commentary explaining why we return EBADF upon attempts to fflush() a read-only file. Discussed on: -current --- lib/libc/stdio/fflush.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/libc/stdio/fflush.c b/lib/libc/stdio/fflush.c index eb40d69eea17..3090dc96d532 100644 --- a/lib/libc/stdio/fflush.c +++ b/lib/libc/stdio/fflush.c @@ -61,6 +61,18 @@ fflush(FILE *fp) if (fp == NULL) return (_fwalk(sflush_locked)); FLOCKFILE(fp); + + /* + * There is disagreement about the correct behaviour of fflush() + * when passed a file which is not open for reading. According to + * the ISO C standard, the behaviour is undefined. + * Under linux, such an fflush returns success and has no effect; + * under Windows, such an fflush is documented as behaving instead + * as fpurge(). + * Given that applications may be written with the expectation of + * either of these two behaviours, the only safe (non-astonishing) + * option is to return EBADF and ask that applications be fixed. + */ if ((fp->_flags & (__SWR | __SRW)) == 0) { errno = EBADF; retval = EOF;