reallocBytes, -- :: Ptr a -> Int -> IO (Ptr a)
free, -- :: Ptr a -> IO ()
- finalizerFree -- :: FunPtr (Ptr a -> IO ())
+ finalizerFree -- :: FinalizerPtr a
) where
import Data.Maybe
import Foreign.Storable ( Storable(sizeOf) )
#ifdef __GLASGOW_HASKELL__
+import Foreign.ForeignPtr ( FinalizerPtr )
import GHC.IOBase
import GHC.Real
import GHC.Ptr
import GHC.Err
import GHC.Base
+import GHC.Num
#elif defined(__NHC__)
+import NHC.FFI ( FinalizerPtr, CInt(..) )
import IO ( bracket )
#else
import Control.Exception ( bracket )
#endif
+#ifdef __HUGS__
+import Hugs.ForeignPtr ( FinalizerPtr )
+#endif
+
-- exported functions
-- ------------------
-- C\'s @realloc()@).
--
reallocBytes :: Ptr a -> Int -> IO (Ptr a)
+reallocBytes ptr 0 = do free ptr; return nullPtr
reallocBytes ptr size =
failWhenNULL "realloc" (_realloc ptr (fromIntegral size))
-- | A pointer to a foreign function equivalent to 'free', which may be used
-- as a finalizer for storage allocated with 'malloc' or 'mallocBytes'.
-foreign import ccall unsafe "stdlib.h &free"
- finalizerFree :: FunPtr (Ptr a -> IO ())
+foreign import ccall unsafe "stdlib.h &free" finalizerFree :: FinalizerPtr a