mirror of
https://github.com/partic2/libffi
synced 2026-11-11 02:27:19 +00:00
Fix sample closure code
This commit is contained in:
committed by
Anthony Green
parent
db0ace3a38
commit
31257b3189
+9
-7
@@ -541,21 +541,23 @@ A trivial example that creates a new @code{puts} by binding
|
||||
#include <ffi.h>
|
||||
|
||||
/* Acts like puts with the file given at time of enclosure. */
|
||||
void puts_binding(ffi_cif *cif, ffi_arg *ret, void* args[],
|
||||
FILE *stream)
|
||||
void puts_binding(ffi_cif *cif, void *ret, void* args[],
|
||||
void *stream)
|
||||
@{
|
||||
*ret = fputs(*(char **)args[0], stream);
|
||||
*(ffi_arg *)ret = fputs(*(char **)args[0], (FILE *)stream);
|
||||
@}
|
||||
|
||||
typedef int (*puts_t)(char *);
|
||||
|
||||
int main()
|
||||
@{
|
||||
ffi_cif cif;
|
||||
ffi_type *args[1];
|
||||
ffi_closure *closure;
|
||||
|
||||
int (*bound_puts)(char *);
|
||||
void *bound_puts;
|
||||
int rc;
|
||||
|
||||
|
||||
/* Allocate closure and bound_puts */
|
||||
closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts);
|
||||
|
||||
@@ -569,10 +571,10 @@ int main()
|
||||
&ffi_type_sint, args) == FFI_OK)
|
||||
@{
|
||||
/* Initialize the closure, setting stream to stdout */
|
||||
if (ffi_prep_closure_loc(closure, &cif, puts_binding,
|
||||
if (ffi_prep_closure_loc(closure, &cif, puts_binding,
|
||||
stdout, bound_puts) == FFI_OK)
|
||||
@{
|
||||
rc = bound_puts("Hello World!");
|
||||
rc = ((puts_t)bound_puts)("Hello World!");
|
||||
/* rc now holds the result of the call to fputs */
|
||||
@}
|
||||
@}
|
||||
|
||||
Reference in New Issue
Block a user