home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!europa.asd.contel.com!darwin.sura.net!wupost!sdd.hp.com!usc!isi.edu!gremlin!lazarus.nrtc.northrop.com!dec
- From: dec@lazarus.nrtc.northrop.com (Dwight E. Cass)
- Newsgroups: comp.unix.bsd
- Subject: STDIO Mode "a+" screwed up
- Message-ID: <39897@gremlin.nrtc.northrop.com>
- Date: 27 Jul 92 17:35:48 GMT
- Sender: news@gremlin.nrtc.northrop.com
- Organization: Northrop Research & Technology Center, Palos Verdes, CA
- Lines: 31
-
- Hi folks,
-
- 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.
-
- What's the cure - ouch. It seems that __sflags() is called by all of
- the open routines and that there is not a clean way of passing back
- the fact that append is desired (why pass it back - you have to seek
- to the bottom of the file [lseek (fd, 0, SEEK_END)] after the file
- is opened (i.e., after you have returned from __sflags()). So - my
- proposal (which I will implement tonight and send patches for
- tommorrow), add one more flag to the ->flags work in the FILE *
- structure. This flag, __SUPD 0x4000, will indicate that the file
- has been opened in an append mode (i.e., I will always set this flag
- for "a", "a+", "ab+", and look at it rather than O_APPEND to make the
- decision as to whether to lseek or not.) We will see what
- side-effects this has.
-
- Any other ideas?
- /dec
-
- Dwight E. Cass dec@nrtc.northrop.com | But there's a hole
- Automation Sciences Laboratory, Northrop Corporation | in the bucket
- One Research Park, Palos Verdes Peninsula, CA 90274 | Dear Liza,
- (310) 544-5393 | Dear Liza...
-