Skip to content

hPutBuf doesn't respect LineBuffering

On 15 April 2005 02:39, Ian Lynagh wrote:

> If I run this program:
> 
> --------------------------------------------------
> import System.Cmd (system)
> import Foreign.C.String (castCharToCChar)
> import Foreign.Marshal.Array (newArray)
> import System.IO (hSetBinaryMode, hPutBuf, stdout,
hSetBuffering,
>                   BufferMode(..))
> 
> main = do hSetBinaryMode stdout True
>           hSetBuffering stdout LineBuffering
>           p <- newArray (map castCharToCChar "foo\n")
>           hPutBuf stdout p 4
>           system "sleep 5"
>           putStr "bar\n"
> --------------------------------------------------
> 
> compiled by GHC then it waits 5 seconds and then
prints foo and bar
> together.
> 
> With hugs, foo is printed and then 5 seconds later
bar is printed, as
> I would expect.

True, the implementation doesn't respect LineBuffering
(though it does
respect the other buffering modes, I believe).  That's
a bug.

Edited by Ian Lynagh -
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information