On March 15, 2010 12:48:02 Iavor Diatchki wrote:
> I have implemented a small extension to the FFI which allows for
> "static_wrapper" imports.  These are a variation on "wrapper" imports
> that do not use run-time code generation.  This is important in
> security sensitive contexts because it avoids executable data.  While
> "static_wrapper" imports are less general then "wrapper" imports, they
> can be used to install Haskell handlers in many C libraries where
> callbacks have an extra "user-data" parameter (e.g., GTK signal
> handlers).

Hi Iavor,

Would not the following also do what you want

 foreign export ccall "haskellCIntCInt" \
   cbind :: CInt -> StablePtr (CInt -> IO CInt) -> IO CInt

 cbind :: a -> StablePtr (a-> IO b) -> IO b
 cbind x f = deRefStablePtr f >>= (\f_ -> f_ x)

On the C side you would then have something like

 register_callback(haskellCIntInt,<wrapped haskell closure>)

where <wrapped haskell closure> would be a stable pointer of type StablePtr 
(CInt -> IO CInt) generated on the haskell side via

 newStablePtr <haskell closure>

and passed to the C code.

Cheers!  -Tyson

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
Glasgow-haskell-users mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to