## girffi girffi — TODO |

## Functions

void | (*GIFFIClosureCallback) ()
ffi_type * | gi_type_tag_get_ffi_type ()
ffi_type * | g_type_info_get_ffi_type ()
void | gi_type_info_extract_ffi_return_value ()
gboolean | g_function_info_prep_invoker ()
gboolean | g_function_invoker_new_for_address ()
void | g_function_invoker_destroy ()
ffi_closure * | g_callable_info_prepare_closure ()
void | g_callable_info_free_closure ()

## Types and Values

struct | GIFunctionInvoker
typedef | GIFFIReturnValue

## Description

TODO

## Functions

### GIFFIClosureCallback ()

    void
    (*GIFFIClosureCallback) (ffi_cif *Param1,
                             void *Param2,
                             void **Param3,
                             void *Param4);

TODO

#### Parameters

Param1 | TODO |
Param2 | TODO |
Param3 | TODO |
Param4 | TODO |

### gi_type_tag_get_ffi_type ()

    ffi_type *
    gi_type_tag_get_ffi_type (GITypeTag type_tag,
                              gboolean is_pointer);

TODO

#### Parameters

type_tag | A GITypeTag |
is_pointer | Whether or not this is a pointer type |

#### Returns

A ffi_type corresponding to the platform default C ABI for `tag` and `is_pointer` .

### g_type_info_get_ffi_type ()

    ffi_type *
    g_type_info_get_ffi_type (GITypeInfo *info);

TODO

#### Parameters

info | A GITypeInfo |

#### Returns

A ffi_type corresponding to the platform default C ABI for `info` .

### gi_type_info_extract_ffi_return_value ()

    void
    gi_type_info_extract_ffi_return_value (GITypeInfo *return_info,
                                           GIFFIReturnValue *ffi_value,
                                           GIArgument *arg);

Extract the correct bits from an ffi_arg return value into GIArgument: https://bugzilla.gnome.org/show_bug.cgi?id=665152

Also see ffi_call(3)

- the storage requirements for return values are "special".

#### Parameters

return_info | TODO |
ffi_value | TODO |
arg | TODO. | [out caller-allocates]

### g_function_info_prep_invoker ()

    gboolean
    g_function_info_prep_invoker (GIFunctionInfo *info,
                                  GIFunctionInvoker *invoker,
                                  GError **error);

Initialize the caller-allocated `invoker` structure with a cache of information needed to invoke the C function corresponding to `info` with the platform's default ABI.

A primary intent of this function is that a dynamic structure allocated by a language binding could contain a GIFunctionInvoker structure inside the binding's function mapping.

#### Parameters

info | A GIFunctionInfo |
invoker | Output invoker structure |
error | A GError |

#### Returns

`TRUE` on success, `FALSE` otherwise with `error` set.

### g_function_invoker_new_for_address ()

    gboolean
    g_function_invoker_new_for_address (gpointer addr,
                                        GICallableInfo *info,
                                        GIFunctionInvoker *invoker,
                                        GError **error);

Initialize the caller-allocated `invoker` structure with a cache of information needed to invoke the C function corresponding to `info` with the platform's default ABI.

A primary intent of this function is that a dynamic structure allocated by a language binding could contain a GIFunctionInvoker structure inside the binding's function mapping.

#### Parameters

addr | The address |
info | A GICallableInfo |
invoker | Output invoker structure |
error | A GError |

#### Returns

`TRUE` on success, `FALSE` otherwise with `error` set.

### g_function_invoker_destroy ()

    void
    g_function_invoker_destroy (GIFunctionInvoker *invoker);

Release all resources allocated for the internals of `invoker` ; callers are responsible for freeing any resources allocated for the structure itself however.

#### Parameters

invoker | A GIFunctionInvoker |

### g_callable_info_prepare_closure ()

    ffi_closure *
    g_callable_info_prepare_closure (GICallableInfo *callable_info,
                                     ffi_cif *cif,
                                     GIFFIClosureCallback callback,
                                     gpointer user_data);

Prepares a callback for ffi invocation.

#### Parameters

callable_info | a callable info from a typelib |
cif | a ffi_cif structure |
callback | the ffi callback |
user_data | data to be passed into the callback |

#### Returns

the ffi_closure or NULL on error. The return value should be freed by calling `g_callable_info_free_closure()`.

### g_callable_info_free_closure ()

    void
    g_callable_info_free_closure (GICallableInfo *callable_info,
                                  ffi_closure *closure);

Frees a ffi_closure returned from `g_callable_info_prepare_closure()`

#### Parameters

callable_info | a callable info from a typelib |
closure | ffi closure |

## Types and Values

### struct GIFunctionInvoker

    struct GIFunctionInvoker {
      ffi_cif cif;
      gpointer native_address;
    };

TODO

#### Members

ffi_cif `cif`; | the cif |
gpointer `native_address`; | the native address |

### GIFFIReturnValue

    typedef GIArgument GIFFIReturnValue;

TODO