From a2126c04fe52481281c757e961fcf927d2743f70 Mon Sep 17 00:00:00 2001
From: simonmar <unknown>
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 1294556ac5aa..f668a1e27066 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
-- 
GitLab