From: Simon Marlow Date: Thu, 25 Nov 2010 12:18:31 +0000 (+0000) Subject: fix hTell behaviour with Unicode Handles X-Git-Url: http://git.megacz.com/?p=ghc-base.git;a=commitdiff_plain;h=b99920eab7fba4e027fd39985840d4e854b8f923 fix hTell behaviour with Unicode Handles --- diff --git a/GHC/IO/Handle.hs b/GHC/IO/Handle.hs index bb45b15..ddf17e7 100644 --- a/GHC/IO/Handle.hs +++ b/GHC/IO/Handle.hs @@ -417,14 +417,17 @@ hTell handle = posn <- IODevice.tell haDevice - cbuf <- readIORef haCharBuffer + -- we can't tell the real byte offset if there are buffered + -- Chars, so must flush first: + flushCharBuffer handle_ + bbuf <- readIORef haByteBuffer - let real_posn - | isWriteBuffer cbuf = posn + fromIntegral (bufR cbuf) - | otherwise = posn - fromIntegral (bufR cbuf - bufL cbuf) - - fromIntegral (bufR bbuf - bufL bbuf) + let real_posn + | isWriteBuffer bbuf = posn + fromIntegral (bufferElems bbuf) + | otherwise = posn - fromIntegral (bufferElems bbuf) + cbuf <- readIORef haCharBuffer debugIO ("\nhGetPosn: (posn, real_posn) = " ++ show (posn, real_posn)) debugIO (" cbuf: " ++ summaryBuffer cbuf ++ " bbuf: " ++ summaryBuffer bbuf)