diff options
author | cperciva <cperciva@FreeBSD.org> | 2004-07-04 20:17:00 +0000 |
---|---|---|
committer | cperciva <cperciva@FreeBSD.org> | 2004-07-04 20:17:00 +0000 |
commit | 965edb055fbb2fcf83e4a055793392433495c5fb (patch) | |
tree | 776d8f813467ff38018ce69eeff746069b249c18 /lib | |
parent | edcbaa381915432ddf31746e03a9fcdb0f2ef5a5 (diff) | |
download | FreeBSD-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.c | 12 |
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; |