From a2126c04fe52481281c757e961fcf927d2743f70 Mon Sep 17 00:00:00 2001 From: simonmar Date: Mon, 14 Jun 1999 09:49:26 +0000 Subject: [PATCH] [project @ 1999-06-14 09:49:26 by simonmar] Oops, forgot that the memory returned from realloc could have moved. --- ghc/compiler/utils/StringBuffer.lhs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ghc/compiler/utils/StringBuffer.lhs b/ghc/compiler/utils/StringBuffer.lhs index 1294556..f668a1e 100644 --- a/ghc/compiler/utils/StringBuffer.lhs +++ b/ghc/compiler/utils/StringBuffer.lhs @@ -225,11 +225,11 @@ trySlurp handle sz_i chunk = tAB_SIZE = 8# - slurpFile :: Int# -> Int# -> Addr -> Int# -> Int# -> IO Int + slurpFile :: Int# -> Int# -> Addr -> Int# -> Int# -> IO (Addr, Int) slurpFile c off chunk chunk_sz max_off = slurp c off where - slurp :: Int# -> Int# -> IO Int + slurp :: Int# -> Int# -> IO (Addr, Int) slurp c off | off >=# max_off = do let new_sz = chunk_sz *# 2# chunk' <- reAllocMem chunk (I# new_sz) @@ -239,7 +239,7 @@ trySlurp handle sz_i chunk = if intc == ((-1)::Int) then do errtype <- getErrType if errtype == (ERR_EOF :: Int) - then return (I# off) + then return (chunk, I# off) else constructErrorAndFail "slurpFile" else case chr intc of '\t' -> tabIt c off @@ -248,7 +248,7 @@ trySlurp handle sz_i chunk = | otherwise = c +# 1# slurp c' (off +# 1#) - tabIt :: Int# -> Int# -> IO Int + tabIt :: Int# -> Int# -> IO (Addr, Int) -- can't run out of buffer in here, because we reserved an -- extra tAB_SIZE bytes at the end earlier. tabIt c off = do @@ -262,11 +262,11 @@ trySlurp handle sz_i chunk = -- allow space for a full tab at the end of the buffer -- (that's what the max_off thing is for) - rc <- slurpFile 0# 0# chunk chunk_sz (chunk_sz -# tAB_SIZE) + (chunk', rc) <- slurpFile 0# 0# chunk chunk_sz (chunk_sz -# tAB_SIZE) writeHandle handle handle_ if rc < (0::Int) then constructErrorAndFail "slurpFile" - else return (chunk, rc) + else return (chunk', rc) reAllocMem :: Addr -> Int -> IO Addr -- 1.7.10.4