[glib/glib-2-32] resources: compiler: Fix resources on big endian architectures



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]