[seed] creating a JSRef to find the length value appears to cause segfaults - replacing with simpler code..
- From: Alan Knowles <alank src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [seed] creating a JSRef to find the length value appears to cause segfaults - replacing with simpler code..
- Date: Thu, 17 May 2012 11:09:13 +0000 (UTC)
commit 0db29c68a1e52bee7763fdb212f2591bfb9c125e
Author: Alan Knowles <alan akbkhome com>
Date: Thu May 17 19:09:05 2012 +0800
creating a JSRef to find the length value appears to cause segfaults - replacing with simpler code.. -
libseed/seed-engine.c | 27 +++++++++++++++++++++------
1 files changed, 21 insertions(+), 6 deletions(-)
---
diff --git a/libseed/seed-engine.c b/libseed/seed-engine.c
index 64634c8..78f57e2 100644
--- a/libseed/seed-engine.c
+++ b/libseed/seed-engine.c
@@ -805,18 +805,33 @@ seed_gobject_method_invoked (JSContextRef ctx,
gint length_arg_pos = g_type_info_get_array_length(type_info);
guint64 array_len = 0;
if (length_arg_pos > -1) {
- JSValueRef jsarray_len;
- GIArgInfo *array_arg_info;
+ GIArgInfo *array_arg_info;
GITypeInfo *array_type_info;
+ GArgument *array_len_arg;
g_assert (out_pos[length_arg_pos] > -1);
+
array_arg_info = g_callable_info_get_arg ((GICallableInfo *) info, length_arg_pos);
array_type_info = g_arg_info_get_type (array_arg_info);
- jsarray_len = seed_value_from_gi_argument (ctx, &out_values[ out_pos[length_arg_pos] ],
- array_type_info, exception);
- array_len = seed_value_to_uint64(ctx, jsarray_len, exception);
+ array_len_arg = &out_values[ out_pos[length_arg_pos] ] ;
+
+ array_len = 0;
+ switch( g_type_info_get_tag (array_type_info) )
+ {
+ // not sure if the non-unsigned versions are need as length should not be -ve..
+ case GI_TYPE_TAG_INT8: array_len = (guint64) array_len_arg->v_int8; break;
+ case GI_TYPE_TAG_UINT8:array_len = (guint64) array_len_arg->v_uint8; break;
+ case GI_TYPE_TAG_INT16: array_len =(guint64) array_len_arg->v_int16; break;
+ case GI_TYPE_TAG_UINT16: array_len =(guint64) array_len_arg->v_uint16; break;
+ case GI_TYPE_TAG_INT32: array_len =(guint64) array_len_arg->v_int32; break;
+ case GI_TYPE_TAG_UINT32: array_len =(guint64) array_len_arg->v_uint32; break;
+ case GI_TYPE_TAG_INT64: array_len = (guint64) array_len_arg->v_int64; break;
+ case GI_TYPE_TAG_UINT64: array_len = (guint64) array_len_arg->v_uint64; break;
+ default: g_assert(1==0); break;
+
+ }
// this may work, but the above should be more accurate..
//array_len = (&out_values[ out_pos[length_arg_pos] ])->v_uint32;
@@ -824,7 +839,7 @@ seed_gobject_method_invoked (JSContextRef ctx,
SEED_NOTE (INVOCATION, "Getting length from OUTPOS=%d, ORIGPOS=%d : result = %d",
out_pos[length_arg_pos], length_arg_pos, array_len);
// free stuff.
- JSValueUnprotect(ctx, jsarray_len);
+
g_base_info_unref ((GIBaseInfo *) array_type_info);
g_base_info_unref ((GIBaseInfo *) array_arg_info);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]