[seed] Closure/Callbacks as return values - currently not handled, but prevents segfaults



commit 5bab9a93c01d2063ec0d70b28d09ddf2ad8747a5
Author: Alan Knowles <alan akbkhome com>
Date:   Mon Jul 5 13:55:12 2010 +0800

    Closure/Callbacks as return values - currently not handled, but prevents segfaults
    
    example : GLib.log_set_default_handler(f,null);
    Returns (f) the callback, our code does not currently handle this so we probably just return null

 libseed/seed-types.c |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)
---
diff --git a/libseed/seed-types.c b/libseed/seed-types.c
index 67fa9e5..67af39e 100644
--- a/libseed/seed-types.c
+++ b/libseed/seed-types.c
@@ -168,6 +168,14 @@ seed_release_arg (GITransfer transfer,
 	  {
 	    interface_info = g_type_info_get_interface (type_info);
 
+	    GIInfoType interface_type = g_base_info_get_type (interface_info);
+	    if (interface_type == GI_INFO_TYPE_CALLBACK)
+	      {
+	        /* FIXME: - callback returns are not handled yet */
+	        g_base_info_unref (interface_info);
+	        break;
+	      }
+
 	    gtype =
 	      g_registered_type_info_get_g_type ((GIRegisteredTypeInfo *)
 						 interface_info);
@@ -888,7 +896,17 @@ seed_gi_argument_make_js (JSContextRef ctx,
 
 	    return strukt;
 	  }
+	else if (interface_type == GI_INFO_TYPE_CALLBACK)
+	  { 
+	    /* FIXME: return values of type callback are not handled yet. */
+	    g_base_info_unref (interface);
+	    return FALSE;
+	  }
+	/* fall through - other types?? */
+	g_base_info_unref (interface);
+	return FALSE;
       }
+
     case GI_TYPE_TAG_GLIST:
       {
 	GITypeInfo *list_type;



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