summaryrefslogtreecommitdiff
path: root/gio/gresource.c
diff options
context:
space:
mode:
authorChristian Persch <chpe@gnome.org>2012-04-09 15:34:10 +0200
committerChristian Persch <chpe@gnome.org>2012-04-16 22:39:34 +0200
commit5ef34e5f11b4f71a66615b6506108ee540cc3420 (patch)
tree8851941b9618e081dfdef2f584c6f9af35686665 /gio/gresource.c
parentcf619cffb77b6792f344b517bb4fc46afe0690f5 (diff)
downloadglib-5ef34e5f11b4f71a66615b6506108ee540cc3420.tar.gz
resources: compiler: Fix resources on big endian architectures
Resources are always little endian, so the gvdb is byteswapped. When looking up the value, it would return a new byteswapped variant, making the data returned from do_lookup() invalid once that variant is unref'd. Since byteswapping doesn't matter for the "ay" data anyway, just use gvdb_table_get_raw_value() instead and only byteswap the length and flag values. https://bugzilla.gnome.org/show_bug.cgi?id=673409
Diffstat (limited to 'gio/gresource.c')
-rw-r--r--gio/gresource.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gio/gresource.c b/gio/gresource.c
index 77ae6ebec..559d916d4 100644
--- a/gio/gresource.c
+++ b/gio/gresource.c
@@ -287,7 +287,7 @@ gboolean do_lookup (GResource *resource,
free_path[path_len-1] = 0;
}
- value = gvdb_table_get_value (resource->table, path);
+ value = gvdb_table_get_raw_value (resource->table, path);
if (value == NULL)
{
@@ -305,6 +305,9 @@ gboolean do_lookup (GResource *resource,
&_flags,
&array);
+ _size = GUINT32_FROM_LE (_size);
+ _flags = GUINT32_FROM_LE (_flags);
+
if (size)
*size = _size;
if (flags)