From af578e81c861cf31f494fc830ba02ca41d7c7613 Mon Sep 17 00:00:00 2001 From: Chun-wei Fan Date: Tue, 24 Jul 2012 16:09:38 +0800 Subject: girepository: Remove C99ism and other updates -Make code using libgirepository_internals relocatable on Windows, like what is done in the GTK+ stack, and the girepository DLL. -Remove C99isms -"interface" is a reserved keyword on certain compilers, so change that to "giinterface" https://bugzilla.gnome.org/show_bug.cgi?id=681820 --- girepository/girmodule.c | 3 ++- girepository/girnode.c | 15 ++++++++++----- girepository/girnode.h | 2 +- girepository/giroffsets.c | 4 ++-- girepository/girparser.c | 33 +++++++++++++++++++++++++++------ 5 files changed, 42 insertions(+), 15 deletions(-) (limited to 'girepository') diff --git a/girepository/girmodule.c b/girepository/girmodule.c index af71f369..05c8987f 100644 --- a/girepository/girmodule.c +++ b/girepository/girmodule.c @@ -261,8 +261,9 @@ add_directory_index_section (guint8 *data, GIrModule *module, guint32 *offset2) for (i = 0; i < n_interfaces; i++) { + const char *str; entry = (DirEntry *)&data[header->directory + (i * header->entry_blob_size)]; - const char *str = (const char *) (&data[entry->name]); + str = (const char *) (&data[entry->name]); _gi_typelib_hash_builder_add_string (dirindex_builder, str, i); } diff --git a/girepository/girnode.c b/girepository/girnode.c index 881aa9be..afb71e57 100644 --- a/girepository/girnode.c +++ b/girepository/girnode.c @@ -28,6 +28,11 @@ #include "girnode.h" #include "gitypelib-internal.h" +#ifdef _MSC_VER +#define strtoll _strtoi64 +#define strtoull _strtoui64 +#endif + static gulong string_count = 0; static gulong unique_string_count = 0; static gulong string_size = 0; @@ -228,7 +233,7 @@ _g_ir_node_free (GIrNode *node) _g_ir_node_free ((GIrNode *)type->parameter_type1); _g_ir_node_free ((GIrNode *)type->parameter_type2); - g_free (type->interface); + g_free (type->giinterface); g_strfreev (type->errors); } @@ -1244,7 +1249,7 @@ serialize_type (GIrTypelibBuild *build, GIrNode *iface; gchar *name; - iface = find_entry_node (build, node->interface, NULL); + iface = find_entry_node (build, node->giinterface, NULL); if (iface) { if (iface->type == G_IR_NODE_XREF) @@ -1253,8 +1258,8 @@ serialize_type (GIrTypelibBuild *build, } else { - g_warning ("Interface for type reference %s not found", node->interface); - name = node->interface; + g_warning ("Interface for type reference %s not found", node->giinterface); + name = node->giinterface; } g_string_append_printf (str, "%s%s", name, @@ -1483,7 +1488,7 @@ _g_ir_node_build_typelib (GIrNode *node, iface->reserved = 0; iface->tag = type->tag; iface->reserved2 = 0; - iface->interface = find_entry (build, type->interface); + iface->interface = find_entry (build, type->giinterface); } break; diff --git a/girepository/girnode.h b/girepository/girnode.h index d89847ac..07b084c4 100644 --- a/girepository/girnode.h +++ b/girepository/girnode.h @@ -133,7 +133,7 @@ struct _GIrNodeType GIrNodeType *parameter_type1; GIrNodeType *parameter_type2; - gchar *interface; + gchar *giinterface; gchar **errors; }; diff --git a/girepository/giroffsets.c b/girepository/giroffsets.c index e3c9d7f5..368332ea 100644 --- a/girepository/giroffsets.c +++ b/girepository/giroffsets.c @@ -190,10 +190,10 @@ get_interface_size_alignment (GIrTypelibBuild *build, { GIrNode *iface; - iface = _g_ir_find_node (build, ((GIrNode*)type)->module, type->interface); + iface = _g_ir_find_node (build, ((GIrNode*)type)->module, type->giinterface); if (!iface) { - _g_ir_module_fatal (build, 0, "Can't resolve type '%s' for %s", type->interface, who); + _g_ir_module_fatal (build, 0, "Can't resolve type '%s' for %s", type->giinterface, who); *size = -1; *alignment = -1; return FALSE; diff --git a/girepository/girparser.c b/girepository/girparser.c index fa0de1f8..ce88a691 100644 --- a/girepository/girparser.c +++ b/girepository/girparser.c @@ -36,6 +36,24 @@ */ #define SUPPORTED_GIR_VERSION "1.2" +#ifdef G_OS_WIN32 + +#include + +#ifdef GIR_DIR +#undef GIR_DIR +#endif + +/* GIR_DIR is used only in code called just once, + * so no problem leaking this + */ +#define GIR_DIR \ + g_build_filename (g_win32_get_package_installation_directory_of_module(NULL), \ + "share", \ + GIR_SUFFIX, \ + NULL) +#endif + struct _GIrParser { gchar **includes; @@ -329,10 +347,12 @@ state_switch (ParseContext *ctx, ParseState newstate) static GIrNode * pop_node (ParseContext *ctx) { + GSList *top; + GIrNode *node; g_assert (ctx->node_stack != 0); - GSList *top = ctx->node_stack; - GIrNode *node = top->data; + top = ctx->node_stack; + node = top->data; g_debug ("popping node %d %s", node->type, node->name); ctx->node_stack = top->next; @@ -552,8 +572,8 @@ parse_type_internal (GIrModule *module, if (*str == '<') { - (str)++; char *tmp, *end; + (str)++; end = strchr (str, '>'); tmp = g_strndup (str, end - str); @@ -565,9 +585,10 @@ parse_type_internal (GIrModule *module, } else { + const char *start; type->tag = GI_TYPE_TAG_INTERFACE; type->is_interface = TRUE; - const char *start = str; + start = str; /* must be an interface type */ while (g_ascii_isalnum (*str) || @@ -577,7 +598,7 @@ parse_type_internal (GIrModule *module, *str == ':') (str)++; - type->interface = g_strndup (start, str - start); + type->giinterface = g_strndup (start, str - start); } if (next) @@ -1965,7 +1986,7 @@ start_type (GMarkupParseContext *context, * doesn't look like a pointer, but is internally. */ if (typenode->tag == GI_TYPE_TAG_INTERFACE && - is_disguised_structure (ctx, typenode->interface)) + is_disguised_structure (ctx, typenode->giinterface)) pointer_depth++; if (pointer_depth > 0) -- cgit v1.2.1