X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Flib%2Fstd%2Fcbits%2FflushFile.c;h=496e881b578361e31f5b55e130322e031a951b77;hb=63db52f1ae5f9d50cf9481c5de1f3ee109f642a5;hp=5631f38f95e697cf984f5426886c810667a5a9aa;hpb=8ac8460237e85049ef2fde1b7e115fa1b52cd378;p=ghc-hetmet.git diff --git a/ghc/lib/std/cbits/flushFile.c b/ghc/lib/std/cbits/flushFile.c index 5631f38..496e881 100644 --- a/ghc/lib/std/cbits/flushFile.c +++ b/ghc/lib/std/cbits/flushFile.c @@ -1,7 +1,7 @@ /* * (c) The GRASP/AQUA Project, Glasgow University, 1994-1998 * - * $Id: flushFile.c,v 1.7 2000/04/12 17:33:16 simonmar Exp $ + * $Id: flushFile.c,v 1.8 2000/09/25 10:51:04 simonmar Exp $ * * hFlush Runtime Support */ @@ -15,8 +15,9 @@ flushFile(StgForeignPtr ptr) IOFileObject* fo = (IOFileObject*)ptr; int rc = 0; - if ( (fo->flags & FILEOBJ_WRITE) && FILEOBJ_NEEDS_FLUSHING(fo) ) { - rc = writeBuffer(ptr,fo->bufWPtr - fo->bufRPtr); + if ( FILEOBJ_WRITEABLE(fo) && FILEOBJ_JUST_WRITTEN(fo) && + FILEOBJ_NEEDS_FLUSHING(fo) ) { + rc = writeBuffer(ptr, fo->bufWPtr - fo->bufRPtr); } return rc; @@ -28,14 +29,10 @@ flushBuffer(StgForeignPtr ptr) IOFileObject* fo = (IOFileObject*)ptr; int rc = 0; - /* If the file object is writeable, or if it's - RW *and* the last operation on it was a write, - flush it. - */ - if ( (!FILEOBJ_READABLE(fo) && FILEOBJ_WRITEABLE(fo)) || - (FILEOBJ_RW(fo) && FILEOBJ_JUST_WRITTEN(fo)) ) { - rc = flushFile(ptr); - if (rc<0) return rc; + if ( FILEOBJ_WRITEABLE(fo) && FILEOBJ_JUST_WRITTEN(fo) && + FILEOBJ_NEEDS_FLUSHING(fo) ) { + rc = writeBuffer(ptr, fo->bufWPtr - fo->bufRPtr); + if (rc<0) return rc; } /* TODO: shouldn't we do the lseek stuff from flushReadBuffer