summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorcperciva <cperciva@FreeBSD.org>2004-07-04 20:17:00 +0000
committercperciva <cperciva@FreeBSD.org>2004-07-04 20:17:00 +0000
commit965edb055fbb2fcf83e4a055793392433495c5fb (patch)
tree776d8f813467ff38018ce69eeff746069b249c18 /lib
parentedcbaa381915432ddf31746e03a9fcdb0f2ef5a5 (diff)
downloadFreeBSD-src-965edb055fbb2fcf83e4a055793392433495c5fb.zip
FreeBSD-src-965edb055fbb2fcf83e4a055793392433495c5fb.tar.gz
Add commentary explaining why we return EBADF upon attempts to fflush() a
read-only file. Discussed on: -current
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/stdio/fflush.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/libc/stdio/fflush.c b/lib/libc/stdio/fflush.c
index eb40d69..3090dc9 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;
OpenPOWER on IntegriCloud