Return to BSD News archive
Path: sserve!manuel!munnari.oz.au!network.ucsd.edu!dog.ee.lbl.gov!horse.ee.lbl.gov!torek
From: torek@horse.ee.lbl.gov (Chris Torek)
Newsgroups: comp.unix.bsd
Subject: Re: STDIO Mode "a+" screwed up
Date: 28 Jul 1992 00:47:22 GMT
Organization: Lawrence Berkeley Laboratory, Berkeley
Lines: 27
Message-ID: <24972@dog.ee.lbl.gov>
References: <39897@gremlin.nrtc.northrop.com>
Reply-To: torek@horse.ee.lbl.gov (Chris Torek)
NNTP-Posting-Host: 128.3.112.15
In article <39897@gremlin.nrtc.northrop.com> dec@lazarus.nrtc.northrop.com
(Dwight E. Cass) writes:
> I have just spent the weekend trying to find out why rogue crashes
>when it attempts to update its score file and have found the problem:
> In: /usr/src/lib/libc/stdio/flags.c - Mode "a+" translates to an
> open flag with O_APPEND (in __sflags()). This means that if
> you seek the file to the beginning and start writting, all the
> written will be APPENDED to the end of the file - rather than
> updating the top of the file as specified by the plus sign.
This is not a bug. ANSI C standard, section 4.9.5.3, pp. 126--127,
l. 39 ff.:
Opening a file with append mode ('a' as the first character in
the mode argument) causes all subsequent writes to the file to
be forced to the then-current end-of-file, *regardless of
intervening calls to the fseek function*.
[emphasis mine]
> What's the cure - ouch.
Fix rogue. It should use "w+" mode.
--
In-Real-Life: Chris Torek, Lawrence Berkeley Lab CSE/EE (+1 510 486 5427)
Berkeley, CA Domain: torek@ee.lbl.gov