[pygobject] Revert "Revert "Fix array termination and size calculation""
- From: John Palmieri <johnp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pygobject] Revert "Revert "Fix array termination and size calculation""
- Date: Wed, 2 Nov 2011 18:51:56 +0000 (UTC)
commit ce2f780bffe44b1d4de617dcbce4b90c58b03c18
Author: John (J5) Palmieri <johnp redhat com>
Date: Wed Nov 2 14:17:21 2011 -0400
Revert "Revert "Fix array termination and size calculation""
This reverts commit cfda820e8d9604c5ef2ad1161c22b20080d5daf4.
gi/pygi-marshal-from-py.c | 6 +++++-
gi/pygi-marshal-to-py.c | 8 +++++++-
2 files changed, 12 insertions(+), 2 deletions(-)
---
diff --git a/gi/pygi-marshal-from-py.c b/gi/pygi-marshal-from-py.c
index 0a94ffe..3b3109c 100644
--- a/gi/pygi-marshal-from-py.c
+++ b/gi/pygi-marshal-from-py.c
@@ -794,7 +794,11 @@ _pygi_marshal_from_py_array (PyGIInvokeState *state,
if (sequence_cache->item_cache->type_tag == GI_TYPE_TAG_UINT8 &&
PYGLIB_PyBytes_Check (py_arg)) {
memcpy(array_->data, PYGLIB_PyBytes_AsString (py_arg), length);
-
+ if (sequence_cache->is_zero_terminated) {
+ /* If array_ has been created with zero_termination, space for the
+ * terminator is properly allocated, so we're not off-by-one here. */
+ array_->data[length] = '\0';
+ }
goto array_success;
}
diff --git a/gi/pygi-marshal-to-py.c b/gi/pygi-marshal-to-py.c
index 984e7c1..67c21cb 100644
--- a/gi/pygi-marshal-to-py.c
+++ b/gi/pygi-marshal-to-py.c
@@ -266,6 +266,8 @@ _pygi_marshal_to_py_array (PyGIInvokeState *state,
array_ = arg->v_pointer;
+ g_assert(array_ != NULL);
+
/* GArrays make it easier to iterate over arrays
* with different element sizes but requires that
* we allocate a GArray if the argument was a C array
@@ -275,7 +277,11 @@ _pygi_marshal_to_py_array (PyGIInvokeState *state,
if (seq_cache->fixed_size >= 0) {
len = seq_cache->fixed_size;
} else if (seq_cache->is_zero_terminated) {
- len = g_strv_length ((gchar **)arg->v_pointer);
+ if(seq_cache->item_cache->type_tag == GI_TYPE_TAG_UINT8) {
+ len = strlen (arg->v_pointer);
+ } else {
+ len = g_strv_length ((gchar **)arg->v_pointer);
+ }
} else {
GIArgument *len_arg = state->args[seq_cache->len_arg_index];
len = len_arg->v_long;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]