Commit 0363c0b3 authored by Simon Marlow's avatar Simon Marlow
Browse files

some fixes for hGetBufSome

 - fix one case where it was blocking when it shouldn't
 - a couple of error-message tweaks
parent deea031d
......@@ -891,9 +891,9 @@ bufReadEmpty h_@Handle__{..}
hGetBufSome :: Handle -> Ptr a -> Int -> IO Int
hGetBufSome h ptr count
| count == 0 = return 0
| count < 0 = illegalBufferSize h "hGetBuf" count
| count < 0 = illegalBufferSize h "hGetBufSome" count
| otherwise =
wantReadableHandle_ "hGetBuf" h $ \ h_@Handle__{..} -> do
wantReadableHandle_ "hGetBufSome" h $ \ h_@Handle__{..} -> do
flushCharReadBuffer h_
buf@Buffer{ bufSize=sz } <- readIORef haByteBuffer
if isEmptyBuffer buf
......@@ -903,7 +903,10 @@ hGetBufSome h ptr count
if r == 0
then return 0
else do writeIORef haByteBuffer buf'
bufReadNBNonEmpty h_ buf' (castPtr ptr) 0 count
bufReadNBNonEmpty h_ buf' (castPtr ptr) 0 (min r count)
-- new count is (min r count), so
-- that bufReadNBNonEmpty will not
-- issue another read.
else
bufReadNBEmpty h_ buf (castPtr ptr) 0 count
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment