# HG changeset patch # User Christian Hammond # Date 1064875575 0 # Node ID cf1126ba1834520512f8d9179f18ed7fe9aa650d # Parent 0ffd540660dff2bfff045f0a9c13597262a44093 [gaim-migrate @ 7596] Multiple copies of gaim installed at different locations no longer attempt to load the same, possibly incompatible plugins. It does this by saving the base filenames of the plugins, rather than the full names, and attempts to load them at the particular copy's plugin directory. Now a released gaim in the system default prefix and a development gaim in a home directory will no longer try to load each other's plugins. They'll each load their own versions of each. Thanks to Robot101 for the patch. committer: Tailor Script diff -r 0ffd540660df -r cf1126ba1834 ChangeLog --- a/ChangeLog Mon Sep 29 22:34:32 2003 +0000 +++ b/ChangeLog Mon Sep 29 22:46:15 2003 +0000 @@ -1,10 +1,13 @@ Gaim: The Pimpin' Penguin IM Clone that's good for the soul! version 0.71 - * Display AIM away messages in the tooltip for buddies when + * Display AIM away messages in the tooltip for buddies when they are away. * Re-write of Jabber protocol plugin * SSL support can now be provided by third party plugins. + * Multiple copies of gaim installed at different locations no + longer attempt to load the same, possibly incompatible plugins + (Robert McQueen) version 0.70 (09/28/2003): * Implemented Yahoo's new authentication method (Cerulean Studios) diff -r 0ffd540660df -r cf1126ba1834 src/plugin.c --- a/src/plugin.c Mon Sep 29 22:34:32 2003 +0000 +++ b/src/plugin.c Mon Sep 29 22:46:15 2003 +0000 @@ -765,8 +765,28 @@ files = gaim_prefs_get_string_list(key); - for (f = files; f; f = f->next) { - gaim_plugin_load(gaim_plugin_probe(f->data)); + for (f = files; f; f = f->next) + { + char *filename = g_path_get_basename(f->data); + GaimPlugin *plugin = NULL; + + if (filename != NULL) + { + if ((plugin = gaim_plugins_find_with_basename(filename)) != NULL) + { + gaim_debug_info("plugins", "Loading saved plugin %s\n", + filename); + gaim_plugin_load(plugin); + } + else + { + gaim_debug_error("plugins", "Unable to find saved plugin %s\n", + filename); + } + + g_free(filename); + } + g_free(f->data); } @@ -989,6 +1009,33 @@ } GaimPlugin * +gaim_plugins_find_with_basename(const char *basename) +{ + GaimPlugin *plugin; + GList *l; + + g_return_val_if_fail(basename != NULL, NULL); + + for (l = plugins; l != NULL; l = l->next) + { + char *tmp; + + plugin = (GaimPlugin *)l->data; + + if (plugin->path != NULL && + (tmp = g_strrstr(plugin->path, basename)) != NULL) + { + tmp += strlen(basename); + + if (*tmp == '\0') + return plugin; + } + } + + return NULL; +} + +GaimPlugin * gaim_plugins_find_with_id(const char *id) { GaimPlugin *plugin; diff -r 0ffd540660df -r cf1126ba1834 src/plugin.h --- a/src/plugin.h Mon Sep 29 22:34:32 2003 +0000 +++ b/src/plugin.h Mon Sep 29 22:46:15 2003 +0000 @@ -411,6 +411,15 @@ GaimPlugin *gaim_plugins_find_with_filename(const char *filename); /** + * Finds a plugin with the specified base filename. + * + * @param basename The base plugin filename. + * + * @return The plugin if found, or @c NULL if not found. + */ +GaimPlugin *gaim_plugins_find_with_basename(const char *basename); + +/** * Finds a plugin with the specified plugin ID. * * @param id The plugin ID.