Fix sample closure code

This commit is contained in:
Andrew Haley
2013-11-16 06:35:51 -05:00
committed by Anthony Green
parent db0ace3a38
commit 31257b3189
5 changed files with 25 additions and 16 deletions

View File

@@ -478,19 +478,21 @@ A trivial example that creates a new 'puts' by binding 'fputs' with
#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 */
@@ -509,7 +511,7 @@ A trivial example that creates a new 'puts' by binding 'fputs' with
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 */
}
}
@@ -610,7 +612,7 @@ Node: Type Example11207
Node: Multiple ABIs12473
Node: The Closure API12844
Node: Closure Example15788
Node: Missing Features17342
Node: Index17795
Node: Missing Features17396
Node: Index17849

End Tag Table