[pygobject] Fix array arguments on 32 bit



commit 37ab227555ba8628b4fa99aa286bd046208745ed
Author: Martin Pitt <martinpitt gnome org>
Date:   Thu Nov 29 11:16:26 2012 +0100

    Fix array arguments on 32 bit
    
    In _pygi_argument_from_object() we never put the actual element GType into the
    constructed array. The array contains GIArguments, or bytes in the case of
    passing a string as an array.
    
    This happened to work on 64 bit machines where GIArgument and char* have the
    same size, but not on 32 bit machines (test_gi.TestPropertiesObject.test_strv
    fails there).

 gi/pygi-argument.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)
---
diff --git a/gi/pygi-argument.c b/gi/pygi-argument.c
index 61453e0..4e3c464 100644
--- a/gi/pygi-argument.c
+++ b/gi/pygi-argument.c
@@ -1146,7 +1146,11 @@ _pygi_argument_from_object (PyObject   *object,
             is_zero_terminated = g_type_info_is_zero_terminated (type_info);
             item_type_info = g_type_info_get_param_type (type_info, 0);
 
-            item_size = _pygi_g_type_info_size (item_type_info);
+            /* we handle arrays that are really strings specially, see below */
+            if (g_type_info_get_tag (item_type_info) == GI_TYPE_TAG_UINT8)
+               item_size = 1;
+            else
+               item_size = sizeof (GIArgument);
 
             array = g_array_sized_new (is_zero_terminated, FALSE, item_size, length);
             if (array == NULL) {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]