[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11341] branches/soc-2007-mosani/source/ blender/blenpluginapi/intern/pluginapi.c: Changes made to plugin api in effort to fix segfault.

Aaron Moore two.a.ron at gmail.com
Mon Jul 23 03:47:09 CEST 2007


Revision: 11341
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11341
Author:   mosani
Date:     2007-07-23 03:47:07 +0200 (Mon, 23 Jul 2007)

Log Message:
-----------
Changes made to plugin api in effort to fix segfault.

Modified Paths:
--------------
    branches/soc-2007-mosani/source/blender/blenpluginapi/intern/pluginapi.c

Modified: branches/soc-2007-mosani/source/blender/blenpluginapi/intern/pluginapi.c
===================================================================
--- branches/soc-2007-mosani/source/blender/blenpluginapi/intern/pluginapi.c	2007-07-23 01:34:07 UTC (rev 11340)
+++ branches/soc-2007-mosani/source/blender/blenpluginapi/intern/pluginapi.c	2007-07-23 01:47:07 UTC (rev 11341)
@@ -340,6 +340,23 @@
 	freeN(d);
 }
 
+static void copy_descriptor(plugin_descriptor_t * src,
+                           plugin_descriptor_t * dst)
+{
+       if (dst->name) { freeN(dst->name); }
+       if (dst->plugin_filename) { freeN(dst->plugin_filename); }
+       if (dst->menu_entry) { freeN(dst->menu_entry); }
+       if (dst->author) { freeN(dst->author); }
+       if (dst->copyright) { freeN(dst->copyright); }
+       if (dst->help) { freeN(dst->help); }
+       if (dst->date) { freeN(dst->date); }
+       if (dst->file_pattern) { freeN(dst->file_pattern); }
+
+       *dst = *src;
+
+       freeN(src);
+}
+
 /* ---------------------------------------------------------------------
    old plugin wrapper code
    --------------------------------------------------------------------- */
@@ -769,15 +786,15 @@
 	return (plugin_descriptor_t *) desc_lists[type].first;
 }
 
-static void insert_desc_entry(plugin_descriptor_t * t)
+static plugin_descriptor_t * insert_desc_entry(plugin_descriptor_t * t)
 {
 	plugin_type_t type = t->plugin_type;
 	plugin_descriptor_t * it = get_desc_list(type);
 
 	while (it) {
-		if (strcmp(it->name, t->name) == 0) {
-			break;
-		}
+			if (strcmp(it->name, t->name) == 0) {
+				break;
+			}
 		it = it->next;
 	}
 
@@ -785,14 +802,14 @@
 		BLI_addtail(&desc_lists[type], t);
 	} else {
 		if (t->interface_version || !it->interface_version) {
-			BLI_insertlink(&desc_lists[type], it, t);
-			BLI_remlink(&desc_lists[type], it);
-
-			delete_descriptor(it);
+			move_descriptor(t, it);
+			return it;
 		} else {
 			delete_descriptor(t);
+			return it;
 		}
 	}
+	return t;
 }
 
 
@@ -1597,9 +1614,7 @@
 		rv->common.load = load;
 	}
 
-	insert_desc_entry(rv);
-
-	return rv;
+	return insert_desc_entry(rv);
 }
 
 LIBEXPORT void plugin_register_private_descriptor(





More information about the Bf-blender-cvs mailing list