summaryrefslogtreecommitdiff
path: root/girepository/ginvoke.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@src.gnome.org>2008-11-11 00:04:45 +0000
committerOwen Taylor <otaylor@src.gnome.org>2008-11-11 00:04:45 +0000
commit1764f6bcf2be6b45b0726694d86c501ce60d1b4e (patch)
tree41da0fde544d8c86c155c294ac5b70cae4b93aa2 /girepository/ginvoke.c
parenteceeb044de0a3dd137fa15da7027ce706504bc94 (diff)
downloadgobject-introspection-1764f6bcf2be6b45b0726694d86c501ce60d1b4e.tar.gz
Split g_ir_ffi_get_ffi_type() out from ginvoke.c
Extract a function to convert GITypeTag to ffi_type from the internals of ginvoke.c. This will be useful in figure out structure alignment. Also fix handling of gsize and time_t to be portable. (Add a check to configure.ac to figure out the width of time_t.) svn path=/trunk/; revision=873
Diffstat (limited to 'girepository/ginvoke.c')
-rw-r--r--girepository/ginvoke.c74
1 files changed, 3 insertions, 71 deletions
diff --git a/girepository/ginvoke.c b/girepository/ginvoke.c
index af21473b..89419e56 100644
--- a/girepository/ginvoke.c
+++ b/girepository/ginvoke.c
@@ -24,6 +24,7 @@
#include <glib-object.h>
#include "girepository.h"
+#include "girffi.h"
#include "gtypelib.h"
#include "config.h"
@@ -41,79 +42,10 @@ g_invoke_error_quark (void)
static ffi_type *
get_ffi_type (GITypeInfo *info)
{
- ffi_type *rettype;
-
if (g_type_info_is_pointer (info))
- rettype = &ffi_type_pointer;
+ return &ffi_type_pointer;
else
- switch (g_type_info_get_tag (info))
- {
- case GI_TYPE_TAG_VOID:
- rettype = &ffi_type_void;
- break;
- case GI_TYPE_TAG_BOOLEAN:
- rettype = &ffi_type_uint;
- break;
- case GI_TYPE_TAG_INT8:
- rettype = &ffi_type_sint8;
- break;
- case GI_TYPE_TAG_UINT8:
- rettype = &ffi_type_uint8;
- break;
- case GI_TYPE_TAG_INT16:
- rettype = &ffi_type_sint16;
- break;
- case GI_TYPE_TAG_UINT16:
- rettype = &ffi_type_uint16;
- break;
- case GI_TYPE_TAG_INT32:
- rettype = &ffi_type_sint32;
- break;
- case GI_TYPE_TAG_UINT32:
- rettype = &ffi_type_uint32;
- break;
- case GI_TYPE_TAG_INT64:
- rettype = &ffi_type_sint64;
- break;
- case GI_TYPE_TAG_UINT64:
- rettype = &ffi_type_uint64;
- break;
- case GI_TYPE_TAG_INT:
- rettype = &ffi_type_sint;
- break;
- case GI_TYPE_TAG_UINT:
- rettype = &ffi_type_uint;
- break;
- case GI_TYPE_TAG_SSIZE: /* FIXME */
- case GI_TYPE_TAG_LONG:
- rettype = &ffi_type_slong;
- break;
- case GI_TYPE_TAG_SIZE: /* FIXME */
- case GI_TYPE_TAG_TIME_T: /* May not be portable */
- case GI_TYPE_TAG_ULONG:
- rettype = &ffi_type_ulong;
- break;
- case GI_TYPE_TAG_FLOAT:
- rettype = &ffi_type_float;
- break;
- case GI_TYPE_TAG_DOUBLE:
- rettype = &ffi_type_double;
- break;
- case GI_TYPE_TAG_UTF8:
- case GI_TYPE_TAG_FILENAME:
- case GI_TYPE_TAG_ARRAY:
- case GI_TYPE_TAG_INTERFACE:
- case GI_TYPE_TAG_GLIST:
- case GI_TYPE_TAG_GSLIST:
- case GI_TYPE_TAG_GHASH:
- case GI_TYPE_TAG_ERROR:
- rettype = &ffi_type_pointer;
- break;
- default:
- g_assert_not_reached ();
- }
-
- return rettype;
+ return g_ir_ffi_get_ffi_type (g_type_info_get_tag (info));
}
/**