[glib/glib-2-32] resources: compiler: Fix resources on big endian architectures
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/glib-2-32] resources: compiler: Fix resources on big endian architectures
- Date: Mon, 16 Apr 2012 20:40:28 +0000 (UTC)
commit 437b831c76079d53649a363f5401cf98134ae2f8
Author: Christian Persch <chpe gnome org>
Date: Mon Apr 9 15:34:10 2012 +0200
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
(cherry picked from commit 5ef34e5f11b4f71a66615b6506108ee540cc3420)
gio/gresource.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
---
diff --git a/gio/gresource.c b/gio/gresource.c
index 77ae6eb..559d916 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)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]