Back to index

python3.2  3.2.2
Functions
cls_double_va.c File Reference
#include "ffitest.h"

Go to the source code of this file.

Functions

static void cls_double_va_fn (ffi_cif *cif __UNUSED__, void *resp, void **args, void *userdata __UNUSED__)
int main (void)

Function Documentation

static void cls_double_va_fn ( ffi_cif *cif  __UNUSED__,
void resp,
void **  args,
void *userdata  __UNUSED__ 
) [static]

Definition at line 12 of file cls_double_va.c.

{
       char*  format        = *(char**)args[0];
       double doubleValue   = *(double*)args[1];

       *(ffi_arg*)resp = printf(format, doubleValue);
}

Here is the caller graph for this function:

int main ( void  )

Definition at line 21 of file cls_double_va.c.

{
       ffi_cif cif;
        void *code;
       ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
       void* args[3];
       ffi_type* arg_types[3];

       char*  format        = "%.1f\n";
       double doubleArg     = 7;
       ffi_arg       res                  = 0;

       arg_types[0] = &ffi_type_pointer;
       arg_types[1] = &ffi_type_double;
       arg_types[2] = NULL;

       CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint,
              arg_types) == FFI_OK);

       args[0] = &format;
       args[1] = &doubleArg;
       args[2] = NULL;

       ffi_call(&cif, FFI_FN(printf), &res, args);
       // { dg-output "7.0" }
       printf("res: %d\n", (int) res);
       // { dg-output "\nres: 4" }

       CHECK(ffi_prep_closure_loc(pcl, &cif, cls_double_va_fn, NULL, code) == FFI_OK);

       res    = ((int(*)(char*, double))(code))(format, doubleArg);
       // { dg-output "\n7.0" }
       printf("res: %d\n", (int) res);
       // { dg-output "\nres: 4" }

       exit(0);
}

Here is the call graph for this function: