2005-03-20 [colin] 1.9.6cvs6
authorColin Leroy <colin@colino.net>
Sun, 20 Mar 2005 21:49:06 +0000 (21:49 +0000)
committerColin Leroy <colin@colino.net>
Sun, 20 Mar 2005 21:49:06 +0000 (21:49 +0000)
* src/common/plugin.c
Check that plugin isn't already loaded
Patch by Alfons

ChangeLog-gtk2.claws
PATCHSETS
configure.ac
src/common/plugin.c

index eefd01bc8467e0f9282ccb008bc3fde2e3933a75..3fabd989f81fbf30f8336283bf70b59d7df24c92 100644 (file)
@@ -1,3 +1,9 @@
+2005-03-20 [colin]     1.9.6cvs6
+
+       * src/common/plugin.c
+               Check that plugin isn't already loaded
+               Patch by Alfons
+
 2005-03-20 [thorsten]  1.9.6cvs5
 
        * src/compose.c
index 2d604c792838ce2bc5c47ddb71722d427693128f..088f3c8d0878c6bb8eb675b03380feacbd9bab7f 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.49.2.36 -r 1.49.2.37 src/procmime.c; ) > 1.9.6cvs3.patchset
 ( cvs diff -u -r 1.30.2.10 -r 1.30.2.11 src/prefs_toolbar.c; ) > 1.9.6cvs4.patchset
 ( cvs diff -u -r 1.382.2.112 -r 1.382.2.113 src/compose.c; ) > 1.9.6cvs5.patchset
+( cvs diff -u -r 1.13.2.3 -r 1.13.2.4 src/common/plugin.c; ) > 1.9.6cvs6.patchset
index efde26dff7776ae888a6e86c7e22c4a966c13dae..cf91905c589ba57eed01ecf0f84c0bc7ec6e4971 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=9
 MICRO_VERSION=6
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=5
+EXTRA_VERSION=6
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index fb685bbcef5ceeec71b6470d4c93ecba7e6dbd77..10cb9d4c9b2d20e9845f5d850c178c08e74ef7ff 100644 (file)
@@ -32,9 +32,9 @@ struct _Plugin
 {
        gchar   *filename;
        GModule *module;
-       gchar   *(*name) (void);
-       gchar   *(*desc) (void);
-       gchar   *(*type) (void);
+       const gchar *(*name) (void);
+       const gchar *(*desc) (void);
+       const gchar *(*type) (void);
 };
 
 /**
@@ -48,6 +48,15 @@ static gint list_find_by_string(gconstpointer data, gconstpointer str)
        return strcmp((gchar *)data, (gchar *)str) ? TRUE : FALSE;
 }
 
+static gint list_find_by_plugin_filename(const Plugin *plugin, const gchar *filename)
+{
+        g_return_val_if_fail(plugin, 1);
+        g_return_val_if_fail(plugin->filename, 1);
+        g_return_val_if_fail(filename, 1);
+        
+        return strcmp(filename, plugin->filename);
+}
+
 void plugin_save_list(void)
 {
        gchar *rcpath, *block;
@@ -98,6 +107,13 @@ gint plugin_load(const gchar *filename, gchar **error)
 
        g_return_val_if_fail(filename != NULL, -1);
        g_return_val_if_fail(error != NULL, -1);
+
+        /* check duplicate plugin path name */
+        if (g_slist_find_custom(plugins, filename, 
+                                (GCompareFunc)list_find_by_plugin_filename)) {
+                *error = g_strdup(_("Plugin already loaded"));
+                return -1;                
+        }                               
        
        plugin = g_new0(Plugin, 1);
        if (plugin == NULL) {