-{-# OPTIONS -fno-implicit-prelude #-}
+{-# OPTIONS_GHC -fno-implicit-prelude #-}
-----------------------------------------------------------------------------
-- |
-- Module : Foreign.Marshal.Utils
--
copyBytes, -- :: Ptr a -> Ptr a -> Int -> IO ()
moveBytes, -- :: Ptr a -> Ptr a -> Int -> IO ()
-
- -- ** DEPRECATED FUNCTIONS (don\'t use; they may disappear at any time)
- --
- withObject -- :: Storable a => a -> (Ptr a -> IO b) -> IO b
) where
import Data.Maybe
-- |@'with' val f@ executes the computation @f@, passing as argument
-- a pointer to a temporarily allocated block of memory into which
--- 'val' has been marshalled (the combination of 'alloca' and 'poke').
+-- @val@ has been marshalled (the combination of 'alloca' and 'poke').
--
-- The memory is freed when @f@ terminates (either normally or via an
-- exception), so the pointer passed to @f@ must /not/ be used after this.
res <- f ptr
return res
--- old DEPRECATED name (don't use; may disappear at any time)
---
-withObject :: Storable a => a -> (Ptr a -> IO b) -> IO b
-{-# DEPRECATED withObject "use `with' instead" #-}
-withObject = with
-
-- marshalling of Boolean values (non-zero corresponds to 'True')
-- -----------------------------
-- first (destination); the copied areas may /not/ overlap
--
copyBytes :: Ptr a -> Ptr a -> Int -> IO ()
-copyBytes dest src size = memcpy dest src (fromIntegral size)
+copyBytes dest src size = do memcpy dest src (fromIntegral size)
+ return ()
--- |Copies the given number of elements from the second area (source) into the
+-- |Copies the given number of bytes from the second area (source) into the
-- first (destination); the copied areas /may/ overlap
--
moveBytes :: Ptr a -> Ptr a -> Int -> IO ()
-moveBytes dest src size = memmove dest src (fromIntegral size)
+moveBytes dest src size = do memmove dest src (fromIntegral size)
+ return ()
-- auxilliary routines
-- |Basic C routines needed for memory copying
--
-foreign import ccall unsafe "string.h" memcpy :: Ptr a -> Ptr a -> CSize -> IO ()
-foreign import ccall unsafe "string.h" memmove :: Ptr a -> Ptr a -> CSize -> IO ()
+foreign import ccall unsafe "string.h" memcpy :: Ptr a -> Ptr a -> CSize -> IO (Ptr a)
+foreign import ccall unsafe "string.h" memmove :: Ptr a -> Ptr a -> CSize -> IO (Ptr a)