diff options
author | Colin Walters <walters@verbum.org> | 2012-02-16 16:58:59 -0500 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2012-03-05 09:56:56 -0500 |
commit | c2fc7cb45243aa9e0e1e5569cc742f69c76a671a (patch) | |
tree | 7f9c5d292a4e71446d6071b7bb235383ba9ca989 /girepository/gicallableinfo.c | |
parent | bf71aba06ccbd3ae4b49133724389cf76108f6d9 (diff) | |
download | gobject-introspection-c2fc7cb45243aa9e0e1e5569cc742f69c76a671a.tar.gz |
repository: Add new public gi_type_info_extract_ffi_return_value() API
Dealing with FFI and return values is very tricky; this API allows
sharing the bits to do it between gobject-introspection and gjs (and
potentially other FFI binding consumers).
**NOTE** I swapped the order of the arguments, under the premise that
out arguments should generally be last.
https://bugzilla.gnome.org/show_bug.cgi?id=668902
Diffstat (limited to 'girepository/gicallableinfo.c')
-rw-r--r-- | girepository/gicallableinfo.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/girepository/gicallableinfo.c b/girepository/gicallableinfo.c index fec77b82..25372ffa 100644 --- a/girepository/gicallableinfo.c +++ b/girepository/gicallableinfo.c @@ -366,12 +366,10 @@ g_callable_info_iterate_return_attributes (GICallableInfo *info, * Also see the ffi_call man page - the storage requirements for return * values are "special". */ -typedef GIArgument GIFFIReturnValue; - -static void -set_gargument_from_ffi_return_value (GITypeInfo *return_info, - GIArgument *arg, - GIFFIReturnValue *ffi_value) +void +gi_type_info_extract_ffi_return_value (GITypeInfo *return_info, + GIFFIReturnValue *ffi_value, + GIArgument *arg) { switch (g_type_info_get_tag (return_info)) { case GI_TYPE_TAG_INT8: @@ -618,7 +616,7 @@ _g_callable_info_invoke (GIFunctionInfo *info, } else { - set_gargument_from_ffi_return_value(rinfo, return_value, &ffi_return_value); + gi_type_info_extract_ffi_return_value (rinfo, &ffi_return_value, return_value); success = TRUE; } out: |