*BSD News Article 6001


Return to BSD News archive

Newsgroups: comp.unix.bsd
Path: sserve!manuel!munnari.oz.au!spool.mu.edu!darwin.sura.net!Sirius.dfn.de!dct.zrz.tu-berlin.de!math.fu-berlin.de!Germany.EU.net!mcsun!sunic!psinntp!psinntp!dg-rtp!ponds.uucp!rivers
From: rivers@ponds.uucp (Thomas David Rivers)
Subject: [386BSD] stdio (fflush and "a+") problems / fix.
Message-ID: <1992Oct3.033742.4726@ponds.uucp>
Keywords: stdio fflush append
Date: Sat, 3 Oct 1992 03:37:42 GMT
Lines: 29


I've discovered the following discrepency in the stdio library w/
regards to opening a stream using  fopen("file","a+")  and later
calling fflush() on that stream.

[I found this because my Cnews got warnings about closing the news
 history file.  Everything else is running fine...]

The fopen() call resets the flags to __SRW because of the '+' in
the mode string.  

Later on, fflush() checks to ensure that the stream being flushed
is actually writable.  To do this, it looks for the __SWR value
in the flags, and *not* __SRW.  There is a comment in stdio.h that
implies that __SWR and __SRW will never be set at the same time.

A correction is to change the test  at line 51 of fflush.c from :

	if ((fp->_flags & __SWR) == 0) {

to

	if ((fp->_flags & (__SWR | __SRW)) == 0 ) {


Since either __SWR or __SRW are sufficient for a file to be "writable."


	- Dave Rivers -