summaryrefslogtreecommitdiff
path: root/girepository
diff options
context:
space:
mode:
authorChun-wei Fan <fanchunwei@src.gnome.org>2012-07-24 16:09:38 +0800
committerColin Walters <walters@verbum.org>2012-10-27 12:06:09 -0400
commitaf578e81c861cf31f494fc830ba02ca41d7c7613 (patch)
tree1c45330f3a7fca45da2e3d654c9c10b03eecb54d /girepository
parentf2e54769ca9f72401d438b66fd6144986ee288f3 (diff)
downloadgobject-introspection-af578e81c861cf31f494fc830ba02ca41d7c7613.tar.gz
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
Diffstat (limited to 'girepository')
-rw-r--r--girepository/girmodule.c3
-rw-r--r--girepository/girnode.c15
-rw-r--r--girepository/girnode.h2
-rw-r--r--girepository/giroffsets.c4
-rw-r--r--girepository/girparser.c33
5 files changed, 42 insertions, 15 deletions
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 <windows.h>
+
+#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)