From e9cb71bc9076489415ffc2f06bcf44e926e2e5e5 Mon Sep 17 00:00:00 2001 From: simonmar Date: Mon, 14 Jun 1999 10:36:51 +0000 Subject: [PATCH] [project @ 1999-06-14 10:36:51 by simonmar] Don't chop off the last character of the buffer. --- ghc/compiler/utils/StringBuffer.lhs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ghc/compiler/utils/StringBuffer.lhs b/ghc/compiler/utils/StringBuffer.lhs index f668a1e..9dbc519 100644 --- a/ghc/compiler/utils/StringBuffer.lhs +++ b/ghc/compiler/utils/StringBuffer.lhs @@ -233,7 +233,7 @@ trySlurp handle sz_i chunk = slurp c off | off >=# max_off = do let new_sz = chunk_sz *# 2# chunk' <- reAllocMem chunk (I# new_sz) - slurpFile c off chunk' new_sz (new_sz -# tAB_SIZE) + slurpFile c off chunk' new_sz (new_sz -# (tAB_SIZE +# 1#)) slurp c off = do intc <- mayBlock fo (_ccall_ fileGetc fo) if intc == ((-1)::Int) @@ -261,12 +261,14 @@ trySlurp handle sz_i chunk = in do -- allow space for a full tab at the end of the buffer - -- (that's what the max_off thing is for) - (chunk', rc) <- slurpFile 0# 0# chunk chunk_sz (chunk_sz -# tAB_SIZE) + -- (that's what the max_off thing is for), + -- and add 1 to allow room for the final sentinel \NUL at + -- the end of the file. + (chunk', rc) <- slurpFile 0# 0# chunk chunk_sz (chunk_sz -# (tAB_SIZE +# 1#)) writeHandle handle handle_ if rc < (0::Int) then constructErrorAndFail "slurpFile" - else return (chunk', rc) + else return (chunk', rc+1 {-room for sentinel-}) reAllocMem :: Addr -> Int -> IO Addr -- 1.7.10.4