Repository : ssh://darcs.haskell.org//srv/darcs/packages/bytestring

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/193a6248f6a30f3fc6e6a4ed54633c2cede3d4dd

>---------------------------------------------------------------

commit 193a6248f6a30f3fc6e6a4ed54633c2cede3d4dd
Author: Duncan Coutts <[email protected]>
Date:   Wed Nov 16 23:27:29 2011 +0000

    Add implementation of builder internal hPut for old or non-ghc Handle
    The current hPut is specific to newer GHC with the new Unicode Handle
    stuff. Provide an implementation for older ghc and non-ghc compilers.

>---------------------------------------------------------------

 Data/ByteString/Lazy/Builder/Internal.hs |   21 +++++++++++++++++----
 1 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/Data/ByteString/Lazy/Builder/Internal.hs 
b/Data/ByteString/Lazy/Builder/Internal.hs
index 042ac86..4497d68 100644
--- a/Data/ByteString/Lazy/Builder/Internal.hs
+++ b/Data/ByteString/Lazy/Builder/Internal.hs
@@ -121,12 +121,16 @@ import qualified Data.ByteString               as S
 import qualified Data.ByteString.Internal      as S
 import qualified Data.ByteString.Lazy.Internal as L
 
+#if __GLASGOW_HASKELL__ >= 611
 import GHC.IO.Buffer (Buffer(..), newByteBuffer)
 import GHC.IO.Handle.Internals (wantWritableHandle, flushWriteBuffer)
 import GHC.IO.Handle.Types (Handle__, haByteBuffer, haBufferMode)
-import GHC.IORef
-
-import System.IO (Handle, hFlush, BufferMode(..))
+import System.IO (hFlush, BufferMode(..))
+import Data.IORef
+#else
+import qualified Data.ByteString.Lazy as L
+#endif
+import System.IO (Handle)
 
 #if MIN_VERSION_base(4,4,0)
 import Foreign hiding (unsafePerformIO, unsafeForeignPtrToPtr)
@@ -415,6 +419,7 @@ putLiftIO io = put $ \k br -> io >>= (`k` br)
 -- buffer is too small to execute one step of the 'Put' action, then
 -- it is replaced with a large enough buffer.
 hPut :: forall a. Handle -> Put a -> IO a
+#if __GLASGOW_HASKELL__ >= 611
 hPut h p = do
     fillHandle 1 (runPut p)
   where
@@ -504,7 +509,15 @@ hPut h p = do
                         L.foldrChunks (\c rest -> S.hPut h c >> rest) (return 
())
                                       (lbsC L.Empty)
                         fillHandle 1 nextStep
-
+#else
+hPut h p =
+    go =<< buildStepToCIOS strategy (return . Finished) (runPut p)
+  where
+    go (Finished k)       = return k
+    go (Yield1 bs io)     = S.hPut h bs >> io >>= go
+    go (YieldC _ lbsC io) = L.hPut h (lbsC L.Empty) >> io >>= go
+    strategy = untrimmedStrategy L.smallChunkSize L.defaultChunkSize
+#endif
 
 ------------------------------------------------------------------------------
 -- ByteString insertion / controlling chunk boundaries



_______________________________________________
Cvs-libraries mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-libraries

Reply via email to