-- License : BSD-style (see the file libraries/core/LICENSE)
--
-- Maintainer : ffi@haskell.org
--- Stability : experimental
--- Portability : non-portable
+-- Stability : provisional
+-- Portability : portable
--
--- $Id: Utils.hs,v 1.1 2001/06/28 14:15:03 simonmar Exp $
+-- $Id: Utils.hs,v 1.3 2002/02/05 17:32:25 simonmar Exp $
--
-- Utilities for primitive marshaling
--
#ifdef __GLASGOW_HASKELL__
import Foreign.Ptr ( Ptr, nullPtr )
-import GHC.Storable ( Storable(poke,destruct) )
-import Foreign.C.TypesISO ( CSize )
-import Foreign.Marshal.Alloc ( malloc, alloca )
+import GHC.Storable ( Storable(poke) )
+import Foreign.C.TypesISO ( CSize )
+import Foreign.Marshal.Alloc ( malloc, alloca )
import GHC.IOBase
-import GHC.Real ( fromIntegral )
+import GHC.Real ( fromIntegral )
import GHC.Num
import GHC.Base
#endif
alloca $ \ptr -> do
poke ptr val
res <- f ptr
- destruct ptr
return res
-- basic C routines needed for memory copying
--
-foreign import unsafe memcpy :: Ptr a -> Ptr a -> CSize -> IO ()
-foreign import unsafe memmove :: Ptr a -> Ptr a -> CSize -> IO ()
+foreign import ccall unsafe memcpy :: Ptr a -> Ptr a -> CSize -> IO ()
+foreign import ccall unsafe memmove :: Ptr a -> Ptr a -> CSize -> IO ()