Index: trunk/src/main.c =================================================================== --- trunk/src/main.c (revision 1240) +++ trunk/src/main.c (revision 1241) @@ -58,6 +58,8 @@ #include "pcb-printf.h" #include "buildin.h" #include "paths.h" +#include "strflags.h" +#include "plugins.h" #include "hid/common/actions.h" @@ -1582,6 +1584,8 @@ free(PCB); PCB = NULL; + plugins_uninit(); + for (i = 0; i < MAX_LAYER; i++) free(Settings.DefaultLayerName[i]); @@ -1831,6 +1835,7 @@ #endif buildin_init(); + plugins_init(); gui->do_export(0); #if HAVE_DBUS Index: trunk/src/plugins.c =================================================================== --- trunk/src/plugins.c (revision 1240) +++ trunk/src/plugins.c (revision 1241) @@ -25,6 +25,27 @@ plugins = i; } +void plugins_init(void) +{ +} + + +void plugins_uninit(void) +{ + plugin_info_t *i, *next; + for(i = plugins; i != NULL; i = next) { + next = i->next; + free(i->name); + free(i->path); + if (i->uninit != NULL) + i->uninit(); + free(i); + } + plugins = NULL; +} + + + /* ---------------------------------------------------------------- */ static const char manageplugins_syntax[] = "ManagePlugins()\n"; Index: trunk/src/plugins.h =================================================================== --- trunk/src/plugins.h (revision 1240) +++ trunk/src/plugins.h (revision 1241) @@ -13,4 +13,11 @@ extern plugin_info_t *plugins; +/* Init the plugin system */ +void plugins_init(void); + +/* Uninit each plugin then uninit the plugin system */ +void plugins_uninit(void); + +/* Register a new plugin (or building) */ void plugin_register(const char *name, const char *path, void *handle, int dynamic, pcb_uninit_t uninit);