[project @ 2000-04-12 17:33:16 by simonmar]
authorsimonmar <unknown>
Wed, 12 Apr 2000 17:33:17 +0000 (17:33 +0000)
committersimonmar <unknown>
Wed, 12 Apr 2000 17:33:17 +0000 (17:33 +0000)
commit313a61d546f55bb2c098ecd0ebb42e15d943201e
tree313c27ee549972fb4d9ef886e27c1708d45af9a0
parentf016aea1357b8ce5a4f3cd866b32761cfd25f841
[project @ 2000-04-12 17:33:16 by simonmar]
This commit fixes the trace/stderr problem, and also fixes some other
problems with the I/O library.

- handles now contain a list of free buffers, which are
  guaranteed to be the same size as the primary handle buffer.

- hPutStr now doesn't evaluate any part of the input string with
  the handle locked.  Instead, it acquires a buffer from the handle
  copies characters into it, then commits the buffer.  This is
  better for concurrency too, because the handle is only locked
  while we're actually reading/writing, not while evaluating.

- there were an even number of off-by-one errors in the I/O system
  which compensated for each other.  This has been fixed.

- made the I/O subsystem a little more exception-safe.  It still
  isn't totally exception-safe, but I can't face doing that
  without a complete rewrite of this thing in Haskell.

- add hPutBufFull and hGetBufFull.  The compiler probably needs to
  be updated to use these too.
ghc/lib/std/PrelHandle.lhs
ghc/lib/std/PrelIO.lhs
ghc/lib/std/PrelIOBase.lhs
ghc/lib/std/cbits/Makefile
ghc/lib/std/cbits/fileObject.c
ghc/lib/std/cbits/fileObject.h
ghc/lib/std/cbits/flushFile.c
ghc/lib/std/cbits/openFile.c
ghc/lib/std/cbits/readFile.c
ghc/lib/std/cbits/stgio.h
ghc/lib/std/cbits/writeFile.c