ref: ddf9aaa31bf2fd3fe08a170e3ed23e53f0b6121a
parent: d9a193c34f815085435b5fbd49c8799f209f69f9
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Tue Jul 23 08:45:10 EDT 2024
Add allocaBytes
--- a/lib/Foreign/Marshal/Alloc.hs
+++ b/lib/Foreign/Marshal/Alloc.hs
@@ -1,7 +1,7 @@
module Foreign.Marshal.Alloc(
malloc, calloc, alloca,
free,
- mallocBytes, callocBytes,
+ mallocBytes, callocBytes, allocaBytes,
) where
import Prelude() -- do not import Prelude
import Primitives
@@ -32,8 +32,11 @@
calloc = callocBytes (sizeOf (undefined :: a))
alloca :: forall a b . Storable a => (Ptr a -> IO b) -> IO b
-alloca io =
- mallocBytes (sizeOf (undefined :: a)) `primBind` (\ p ->
+alloca = allocaBytes (sizeOf (undefined :: a))
+
+allocaBytes :: forall a b . Int -> (Ptr a -> IO b) -> IO b
+allocaBytes len io =
+ mallocBytes len `primBind` (\ p ->
io p `primBind` (\ b ->
free p `primThen`
primReturn b))
--
⑨