diff options
author | Owen Taylor <otaylor@src.gnome.org> | 2008-11-11 00:04:45 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2008-11-11 00:04:45 +0000 |
commit | 1764f6bcf2be6b45b0726694d86c501ce60d1b4e (patch) | |
tree | 41da0fde544d8c86c155c294ac5b70cae4b93aa2 /girepository/ginvoke.c | |
parent | eceeb044de0a3dd137fa15da7027ce706504bc94 (diff) | |
download | gobject-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.c | 74 |
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)); } /** |