libpurple/plugin.c

Mon, 12 May 2014 21:22:30 +0200

author
Tomasz Wasilczyk <twasilczyk@pidgin.im>
date
Mon, 12 May 2014 21:22:30 +0200
branch
release-2.x.y
changeset 36026
ee9d95cb8ee6
parent 33794
716cbef8d1c6
child 33796
4854740e5277
child 38259
c593fc9f5438
permissions
-rw-r--r--

Fix coverity log_reader issues

5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
2 * purple
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
4 * Purple is the legal property of its developers, whose names are too numerous
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7956
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7956
diff changeset
6 * source distribution.
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
7 *
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 * (at your option) any later version.
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 *
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 * GNU General Public License for more details.
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 *
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 18889
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21 */
24569
5dbd0617a27d Build everything with the *_DISABLE_DEPRECATED flags set. This allows us
Richard Laager <rlaager@pidgin.im>
parents: 23220
diff changeset
22 #define _PURPLE_PLUGIN_C_
5dbd0617a27d Build everything with the *_DISABLE_DEPRECATED flags set. This allows us
Richard Laager <rlaager@pidgin.im>
parents: 23220
diff changeset
23
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5840
diff changeset
24 #include "internal.h"
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
25
5638
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5573
diff changeset
26 #include "accountopt.h"
14787
2adb9bac76b5 [gaim-migrate @ 17479]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14254
diff changeset
27 #include "core.h"
13136
0438506e90ac [gaim-migrate @ 15497]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13107
diff changeset
28 #include "dbus-maybe.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5840
diff changeset
29 #include "debug.h"
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5357
diff changeset
30 #include "notify.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5840
diff changeset
31 #include "prefs.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5840
diff changeset
32 #include "prpl.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5840
diff changeset
33 #include "request.h"
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6432
diff changeset
34 #include "signals.h"
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
35 #include "util.h"
27973
dadadccfb951 Automatically detect if running under valgrind and don't close plugin
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 27859
diff changeset
36 #include "valgrind.h"
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
37 #include "version.h"
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
38
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
39 typedef struct
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
40 {
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
41 GHashTable *commands;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
42 size_t command_count;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
43
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
44 } PurplePluginIpcInfo;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
45
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
46 typedef struct
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
47 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
48 PurpleCallback func;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
49 PurpleSignalMarshalFunc marshal;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
50
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
51 int num_params;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
52 PurpleValue **params;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
53 PurpleValue *ret_value;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
54
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
55 } PurplePluginIpcCommand;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
56
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
57 static GList *search_paths = NULL;
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
58 static GList *plugins = NULL;
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
59 static GList *loaded_plugins = NULL;
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
60 static GList *protocol_plugins = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
61 #ifdef PURPLE_PLUGINS
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
62 static GList *load_queue = NULL;
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
63 static GList *plugin_loaders = NULL;
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
64 static GList *plugins_to_disable = NULL;
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
65 #endif
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
66
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
67 static void (*probe_cb)(void *) = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
68 static void *probe_cb_data = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
69 static void (*load_cb)(PurplePlugin *, void *) = NULL;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
70 static void *load_cb_data = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
71 static void (*unload_cb)(PurplePlugin *, void *) = NULL;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
72 static void *unload_cb_data = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
73
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
74 #ifdef PURPLE_PLUGINS
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
75
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
76 static gboolean
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
77 has_file_extension(const char *filename, const char *ext)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
78 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
79 int len, extlen;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
80
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
81 if (filename == NULL || *filename == '\0' || ext == NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
82 return 0;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
83
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
84 extlen = strlen(ext);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
85 len = strlen(filename) - extlen;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
86
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
87 if (len < 0)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
88 return 0;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
89
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
90 return (strncmp(filename + len, ext, extlen) == 0);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
91 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
92
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
93 static gboolean
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
94 is_native(const char *filename)
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
95 {
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
96 const char *last_period;
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
97
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
98 last_period = strrchr(filename, '.');
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
99 if (last_period == NULL)
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
100 return FALSE;
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
101
12077
484da2b29933 [gaim-migrate @ 14374]
Mark Doliner <markdoliner@pidgin.im>
parents: 12066
diff changeset
102 return !(strcmp(last_period, ".dll") &
484da2b29933 [gaim-migrate @ 14374]
Mark Doliner <markdoliner@pidgin.im>
parents: 12066
diff changeset
103 strcmp(last_period, ".sl") &
484da2b29933 [gaim-migrate @ 14374]
Mark Doliner <markdoliner@pidgin.im>
parents: 12066
diff changeset
104 strcmp(last_period, ".so"));
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
105 }
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
106
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
107 static char *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
108 purple_plugin_get_basename(const char *filename)
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
109 {
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
110 const char *basename;
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
111 const char *last_period;
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
112
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
113 basename = strrchr(filename, G_DIR_SEPARATOR);
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
114 if (basename != NULL)
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
115 basename++;
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
116 else
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
117 basename = filename;
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
118
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
119 if (is_native(basename) &&
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
120 ((last_period = strrchr(basename, '.')) != NULL))
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
121 return g_strndup(basename, (last_period - basename));
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
122
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
123 return g_strdup(basename);
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
124 }
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
125
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
126 static gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
127 loader_supports_file(PurplePlugin *loader, const char *filename)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
128 {
6432
deb64099bbf3 [gaim-migrate @ 6940]
Ethan Blanton <elb@pidgin.im>
parents: 5981
diff changeset
129 GList *exts;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
130
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
131 for (exts = PURPLE_PLUGIN_LOADER_INFO(loader)->exts; exts != NULL; exts = exts->next) {
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
132 if (has_file_extension(filename, (char *)exts->data)) {
6432
deb64099bbf3 [gaim-migrate @ 6940]
Ethan Blanton <elb@pidgin.im>
parents: 5981
diff changeset
133 return TRUE;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
134 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
135 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
136
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
137 return FALSE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
138 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
139
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
140 static PurplePlugin *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
141 find_loader_for_plugin(const PurplePlugin *plugin)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
142 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
143 PurplePlugin *loader;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
144 GList *l;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
145
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
146 if (plugin->path == NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
147 return NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
148
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
149 for (l = purple_plugins_get_loaded(); l != NULL; l = l->next) {
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
150 loader = l->data;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
151
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
152 if (loader->info->type == PURPLE_PLUGIN_LOADER &&
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
153 loader_supports_file(loader, plugin->path)) {
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
154
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
155 return loader;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
156 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
157
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
158 loader = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
159 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
160
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
161 return NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
162 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
163
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
164 #endif /* PURPLE_PLUGINS */
5449
4c350eb7d4a0 [gaim-migrate @ 5836]
Decklin Foster <decklin@red-bean.com>
parents: 5443
diff changeset
165
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
166 /**
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
167 * Negative if a before b, 0 if equal, positive if a after b.
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
168 */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
169 static gint
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
170 compare_prpl(PurplePlugin *a, PurplePlugin *b)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
171 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
172 if(PURPLE_IS_PROTOCOL_PLUGIN(a)) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
173 if(PURPLE_IS_PROTOCOL_PLUGIN(b))
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7279
diff changeset
174 return strcmp(a->info->name, b->info->name);
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7279
diff changeset
175 else
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7279
diff changeset
176 return -1;
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7279
diff changeset
177 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
178 if(PURPLE_IS_PROTOCOL_PLUGIN(b))
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7279
diff changeset
179 return 1;
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7279
diff changeset
180 else
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7279
diff changeset
181 return 0;
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7279
diff changeset
182 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
183 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
184
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
185 PurplePlugin *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
186 purple_plugin_new(gboolean native, const char *path)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
187 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
188 PurplePlugin *plugin;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
189
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
190 plugin = g_new0(PurplePlugin, 1);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
191
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
192 plugin->native_plugin = native;
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14024
diff changeset
193 plugin->path = g_strdup(path);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
194
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
195 PURPLE_DBUS_REGISTER_POINTER(plugin, PurplePlugin);
13136
0438506e90ac [gaim-migrate @ 15497]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13107
diff changeset
196
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
197 return plugin;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
198 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
199
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
200 PurplePlugin *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
201 purple_plugin_probe(const char *filename)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
202 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
203 #ifdef PURPLE_PLUGINS
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
204 PurplePlugin *plugin = NULL;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
205 PurplePlugin *loader;
10124
68426d8af5d0 [gaim-migrate @ 11161]
Nathan Walp <nwalp@pidgin.im>
parents: 10087
diff changeset
206 gpointer unpunned;
12342
da61b726d595 [gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12332
diff changeset
207 gchar *basename = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
208 gboolean (*purple_init_plugin)(PurplePlugin *);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
209
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
210 purple_debug_misc("plugins", "probing %s\n", filename);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
211 g_return_val_if_fail(filename != NULL, NULL);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
212
5973
adc75f0fcaa3 [gaim-migrate @ 6420]
Mark Doliner <markdoliner@pidgin.im>
parents: 5949
diff changeset
213 if (!g_file_test(filename, G_FILE_TEST_EXISTS))
adc75f0fcaa3 [gaim-migrate @ 6420]
Mark Doliner <markdoliner@pidgin.im>
parents: 5949
diff changeset
214 return NULL;
adc75f0fcaa3 [gaim-migrate @ 6420]
Mark Doliner <markdoliner@pidgin.im>
parents: 5949
diff changeset
215
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
216 /* If this plugin has already been probed then exit */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
217 basename = purple_plugin_get_basename(filename);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
218 plugin = purple_plugins_find_with_basename(basename);
12342
da61b726d595 [gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12332
diff changeset
219 g_free(basename);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
220 if (plugin != NULL)
12342
da61b726d595 [gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12332
diff changeset
221 {
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 24569
diff changeset
222 if (purple_strequal(filename, plugin->path))
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
223 return plugin;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
224 else if (!purple_plugin_is_unloadable(plugin))
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
225 {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27361
diff changeset
226 purple_debug_warning("plugins", "Not loading %s. "
12342
da61b726d595 [gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12332
diff changeset
227 "Another plugin with the same name (%s) has already been loaded.\n",
da61b726d595 [gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12332
diff changeset
228 filename, plugin->path);
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
229 return plugin;
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
230 }
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
231 else
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
232 {
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
233 /* The old plugin was a different file and it was unloadable.
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
234 * There's no guarantee that this new file with the same name
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
235 * will be loadable, but unless it fails in one of the silent
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
236 * ways and the first one didn't, it's not any worse. The user
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
237 * will still see a greyed-out plugin, which is what we want. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
238 purple_plugin_destroy(plugin);
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
239 }
12342
da61b726d595 [gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12332
diff changeset
240 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
241
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
242 plugin = purple_plugin_new(has_file_extension(filename, G_MODULE_SUFFIX), filename);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
243
12699
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
244 if (plugin->native_plugin) {
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
245 const char *error;
12623
4f1fe7e1f808 [gaim-migrate @ 14959]
Daniel Atallah <datallah@pidgin.im>
parents: 12342
diff changeset
246 #ifdef _WIN32
4f1fe7e1f808 [gaim-migrate @ 14959]
Daniel Atallah <datallah@pidgin.im>
parents: 12342
diff changeset
247 /* Suppress error popups for failing to load plugins */
4f1fe7e1f808 [gaim-migrate @ 14959]
Daniel Atallah <datallah@pidgin.im>
parents: 12342
diff changeset
248 UINT old_error_mode = SetErrorMode(SEM_FAILCRITICALERRORS);
4f1fe7e1f808 [gaim-migrate @ 14959]
Daniel Atallah <datallah@pidgin.im>
parents: 12342
diff changeset
249 #endif
12696
6c964da4a652 [gaim-migrate @ 15039]
Nathan Walp <nwalp@pidgin.im>
parents: 12695
diff changeset
250
10737
c7759d698996 [gaim-migrate @ 12339]
Mark Doliner <markdoliner@pidgin.im>
parents: 10682
diff changeset
251 /*
10950
72a6cc0fc7a8 [gaim-migrate @ 12750]
Richard Laager <rlaager@pidgin.im>
parents: 10884
diff changeset
252 * We pass G_MODULE_BIND_LOCAL here to prevent symbols from
72a6cc0fc7a8 [gaim-migrate @ 12750]
Richard Laager <rlaager@pidgin.im>
parents: 10884
diff changeset
253 * plugins being added to the global name space.
11378
5857f76fb6b2 [gaim-migrate @ 13604]
Mark Doliner <markdoliner@pidgin.im>
parents: 11256
diff changeset
254 *
5857f76fb6b2 [gaim-migrate @ 13604]
Mark Doliner <markdoliner@pidgin.im>
parents: 11256
diff changeset
255 * G_MODULE_BIND_LOCAL was added in glib 2.3.3.
10737
c7759d698996 [gaim-migrate @ 12339]
Mark Doliner <markdoliner@pidgin.im>
parents: 10682
diff changeset
256 */
10884
672f44600655 [gaim-migrate @ 12582]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10737
diff changeset
257 plugin->handle = g_module_open(filename, G_MODULE_BIND_LOCAL);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
258
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
259 if (plugin->handle == NULL)
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
260 {
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
261 const char *error = g_module_error();
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
262 if (error != NULL && purple_str_has_prefix(error, filename))
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
263 {
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
264 error = error + strlen(filename);
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
265
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
266 /* These are just so we don't crash. If we
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
267 * got this far, they should always be true. */
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
268 if (*error == ':')
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
269 error++;
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
270 if (*error == ' ')
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
271 error++;
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
272 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
273
12704
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
274 if (error == NULL || !*error)
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
275 {
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
276 plugin->error = g_strdup(_("Unknown error"));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
277 purple_debug_error("plugins", "%s is not loadable: Unknown error\n",
12704
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
278 plugin->path);
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
279 }
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
280 else
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
281 {
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
282 plugin->error = g_strdup(error);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
283 purple_debug_error("plugins", "%s is not loadable: %s\n",
12704
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
284 plugin->path, plugin->error);
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
285 }
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
286 plugin->handle = g_module_open(filename, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
5269
a318feccd844 [gaim-migrate @ 5641]
Christian Hammond <chipx86@chipx86.com>
parents: 5268
diff changeset
287
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
288 if (plugin->handle == NULL)
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
289 {
12699
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
290 #ifdef _WIN32
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
291 /* Restore the original error mode */
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
292 SetErrorMode(old_error_mode);
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
293 #endif
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
294 purple_plugin_destroy(plugin);
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
295 return NULL;
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
296 }
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
297 else
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
298 {
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
299 /* We were able to load the plugin with lazy symbol binding.
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
300 * This means we're missing some symbol. Mark it as
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
301 * unloadable and keep going so we get the info to display
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
302 * to the user so they know to rebuild this plugin. */
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
303 plugin->unloadable = TRUE;
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
304 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
305 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
306
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
307 if (!g_module_symbol(plugin->handle, "purple_init_plugin",
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
308 &unpunned))
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
309 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
310 purple_debug_error("plugins", "%s is not usable because the "
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
311 "'purple_init_plugin' symbol could not be "
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
312 "found. Does the plugin call the "
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
313 "PURPLE_INIT_PLUGIN() macro?\n", plugin->path);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
314
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
315 g_module_close(plugin->handle);
5443
2bc0d2616c53 [gaim-migrate @ 5825]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
316 error = g_module_error();
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
317 if (error != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
318 purple_debug_error("plugins", "Error closing module %s: %s\n",
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
319 plugin->path, error);
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
320 plugin->handle = NULL;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
321
12699
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
322 #ifdef _WIN32
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
323 /* Restore the original error mode */
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
324 SetErrorMode(old_error_mode);
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
325 #endif
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
326 purple_plugin_destroy(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
327 return NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
328 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
329 purple_init_plugin = unpunned;
12699
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
330
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
331 #ifdef _WIN32
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
332 /* Restore the original error mode */
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
333 SetErrorMode(old_error_mode);
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
334 #endif
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
335 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
336 else {
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
337 loader = find_loader_for_plugin(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
338
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
339 if (loader == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
340 purple_plugin_destroy(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
341 return NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
342 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
343
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
344 purple_init_plugin = PURPLE_PLUGIN_LOADER_INFO(loader)->probe;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
345 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
346
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
347 if (!purple_init_plugin(plugin) || plugin->info == NULL)
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
348 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
349 purple_plugin_destroy(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
350 return NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
351 }
14787
2adb9bac76b5 [gaim-migrate @ 17479]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14254
diff changeset
352 else if (plugin->info->ui_requirement &&
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 24569
diff changeset
353 !purple_strequal(plugin->info->ui_requirement, purple_core_get_ui()))
14787
2adb9bac76b5 [gaim-migrate @ 17479]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14254
diff changeset
354 {
14918
db9f9d302973 [gaim-migrate @ 17625]
Mark Doliner <markdoliner@pidgin.im>
parents: 14895
diff changeset
355 plugin->error = g_strdup_printf(_("You are using %s, but this plugin requires %s."),
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
356 purple_core_get_ui(), plugin->info->ui_requirement);
23220
21df3f693ca1 Use a little more helpful debug message when a plugin can't be loaded.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22875
diff changeset
357 purple_debug_error("plugins", "%s is not loadable: The UI requirement is not met. (%s)\n", plugin->path, plugin->error);
14787
2adb9bac76b5 [gaim-migrate @ 17479]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14254
diff changeset
358 plugin->unloadable = TRUE;
2adb9bac76b5 [gaim-migrate @ 17479]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14254
diff changeset
359 return plugin;
2adb9bac76b5 [gaim-migrate @ 17479]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14254
diff changeset
360 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
361
15962
572de405bf5b Get rid of an unnecessary strdup
Mark Doliner <markdoliner@pidgin.im>
parents: 15938
diff changeset
362 /*
572de405bf5b Get rid of an unnecessary strdup
Mark Doliner <markdoliner@pidgin.im>
parents: 15938
diff changeset
363 * Check to make sure a plugin has defined an id.
572de405bf5b Get rid of an unnecessary strdup
Mark Doliner <markdoliner@pidgin.im>
parents: 15938
diff changeset
364 * Not having this check caused purple_plugin_unload to
572de405bf5b Get rid of an unnecessary strdup
Mark Doliner <markdoliner@pidgin.im>
parents: 15938
diff changeset
365 * enter an infinite loop in certain situations by passing
572de405bf5b Get rid of an unnecessary strdup
Mark Doliner <markdoliner@pidgin.im>
parents: 15938
diff changeset
366 * purple_find_plugin_by_id a NULL value. -- ecoffey
572de405bf5b Get rid of an unnecessary strdup
Mark Doliner <markdoliner@pidgin.im>
parents: 15938
diff changeset
367 */
15951
079275c87868 A small fix to the patch from ecoffey: Gary pointed out that the strcmp()
Richard Laager <rlaager@pidgin.im>
parents: 15938
diff changeset
368 if (plugin->info->id == NULL || *plugin->info->id == '\0')
15938
1b037158411e SF Patch #1686400 from Eoin Coffey ("ecoffey")
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
369 {
25359
ea172b7ea601 The remainder of a patch from fqueze to fix some incorrect *printf() function
Daniel Atallah <datallah@pidgin.im>
parents: 24569
diff changeset
370 plugin->error = g_strdup(_("This plugin has not defined an ID."));
15938
1b037158411e SF Patch #1686400 from Eoin Coffey ("ecoffey")
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
371 purple_debug_error("plugins", "%s is not loadable: info->id is not defined.\n", plugin->path);
1b037158411e SF Patch #1686400 from Eoin Coffey ("ecoffey")
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
372 plugin->unloadable = TRUE;
1b037158411e SF Patch #1686400 from Eoin Coffey ("ecoffey")
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
373 return plugin;
1b037158411e SF Patch #1686400 from Eoin Coffey ("ecoffey")
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
374 }
1b037158411e SF Patch #1686400 from Eoin Coffey ("ecoffey")
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
375
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
376 /* Really old plugins. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
377 if (plugin->info->magic != PURPLE_PLUGIN_MAGIC)
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
378 {
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
379 if (plugin->info->magic >= 2 && plugin->info->magic <= 4)
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
380 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
381 struct _PurplePluginInfo2
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
382 {
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
383 unsigned int api_version;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
384 PurplePluginType type;
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
385 char *ui_requirement;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
386 unsigned long flags;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
387 GList *dependencies;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
388 PurplePluginPriority priority;
14895
38793d566e1c [gaim-migrate @ 17600]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14894
diff changeset
389
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
390 char *id;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
391 char *name;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
392 char *version;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
393 char *summary;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
394 char *description;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
395 char *author;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
396 char *homepage;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
397
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
398 gboolean (*load)(PurplePlugin *plugin);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
399 gboolean (*unload)(PurplePlugin *plugin);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
400 void (*destroy)(PurplePlugin *plugin);
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
401
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
402 void *ui_info;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
403 void *extra_info;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
404 PurplePluginUiInfo *prefs_info;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
405 GList *(*actions)(PurplePlugin *plugin, gpointer context);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
406 } *info2 = (struct _PurplePluginInfo2 *)plugin->info;
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
407
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
408 /* This leaks... but only for ancient plugins, so deal with it. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
409 plugin->info = g_new0(PurplePluginInfo, 1);
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
410
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
411 /* We don't really need all these to display the plugin info, but
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
412 * I'm copying them all for good measure. */
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
413 plugin->info->magic = info2->api_version;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
414 plugin->info->type = info2->type;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
415 plugin->info->ui_requirement = info2->ui_requirement;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
416 plugin->info->flags = info2->flags;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
417 plugin->info->dependencies = info2->dependencies;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
418 plugin->info->id = info2->id;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
419 plugin->info->name = info2->name;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
420 plugin->info->version = info2->version;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
421 plugin->info->summary = info2->summary;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
422 plugin->info->description = info2->description;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
423 plugin->info->author = info2->author;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
424 plugin->info->homepage = info2->homepage;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
425 plugin->info->load = info2->load;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
426 plugin->info->unload = info2->unload;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
427 plugin->info->destroy = info2->destroy;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
428 plugin->info->ui_info = info2->ui_info;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
429 plugin->info->extra_info = info2->extra_info;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
430
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
431 if (info2->api_version >= 3)
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
432 plugin->info->prefs_info = info2->prefs_info;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
433
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
434 if (info2->api_version >= 4)
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
435 plugin->info->actions = info2->actions;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
436
12704
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
437
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
438 plugin->error = g_strdup_printf(_("Plugin magic mismatch %d (need %d)"),
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
439 plugin->info->magic, PURPLE_PLUGIN_MAGIC);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
440 purple_debug_error("plugins", "%s is not loadable: Plugin magic mismatch %d (need %d)\n",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
441 plugin->path, plugin->info->magic, PURPLE_PLUGIN_MAGIC);
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
442 plugin->unloadable = TRUE;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
443 return plugin;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
444 }
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
445
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
446 purple_debug_error("plugins", "%s is not loadable: Plugin magic mismatch %d (need %d)\n",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
447 plugin->path, plugin->info->magic, PURPLE_PLUGIN_MAGIC);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
448 purple_plugin_destroy(plugin);
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
449 return NULL;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
450 }
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
451
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
452 if (plugin->info->major_version != PURPLE_MAJOR_VERSION ||
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
453 plugin->info->minor_version > PURPLE_MINOR_VERSION)
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
454 {
12704
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
455 plugin->error = g_strdup_printf(_("ABI version mismatch %d.%d.x (need %d.%d.x)"),
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
456 plugin->info->major_version, plugin->info->minor_version,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
457 PURPLE_MAJOR_VERSION, PURPLE_MINOR_VERSION);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
458 purple_debug_error("plugins", "%s is not loadable: ABI version mismatch %d.%d.x (need %d.%d.x)\n",
12704
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
459 plugin->path, plugin->info->major_version, plugin->info->minor_version,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
460 PURPLE_MAJOR_VERSION, PURPLE_MINOR_VERSION);
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
461 plugin->unloadable = TRUE;
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
462 return plugin;
10156
463aca04c29a [gaim-migrate @ 11236]
Mark Doliner <markdoliner@pidgin.im>
parents: 10145
diff changeset
463 }
463aca04c29a [gaim-migrate @ 11236]
Mark Doliner <markdoliner@pidgin.im>
parents: 10145
diff changeset
464
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
465 if (plugin->info->type == PURPLE_PLUGIN_PROTOCOL)
10156
463aca04c29a [gaim-migrate @ 11236]
Mark Doliner <markdoliner@pidgin.im>
parents: 10145
diff changeset
466 {
13311
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
467 /* If plugin is a PRPL, make sure it implements the required functions */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
468 if ((PURPLE_PLUGIN_PROTOCOL_INFO(plugin)->list_icon == NULL) ||
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
469 (PURPLE_PLUGIN_PROTOCOL_INFO(plugin)->login == NULL) ||
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
470 (PURPLE_PLUGIN_PROTOCOL_INFO(plugin)->close == NULL))
13311
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
471 {
23220
21df3f693ca1 Use a little more helpful debug message when a plugin can't be loaded.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22875
diff changeset
472 plugin->error = g_strdup(_("Plugin does not implement all required functions (list_icon, login and close)"));
21df3f693ca1 Use a little more helpful debug message when a plugin can't be loaded.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22875
diff changeset
473 purple_debug_error("plugins", "%s is not loadable: %s\n",
21df3f693ca1 Use a little more helpful debug message when a plugin can't be loaded.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22875
diff changeset
474 plugin->path, plugin->error);
13311
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
475 plugin->unloadable = TRUE;
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
476 return plugin;
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
477 }
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
478
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
479 /* For debugging, let's warn about prpl prefs. */
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
480 if (plugin->info->prefs_info != NULL)
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
481 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
482 purple_debug_error("plugins", "%s has a prefs_info, but is a prpl. This is no longer supported.\n",
13311
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
483 plugin->path);
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
484 }
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
485 }
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
486
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
487 return plugin;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
488 #else
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
489 return NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
490 #endif /* !PURPLE_PLUGINS */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
491 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
492
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
493 #ifdef PURPLE_PLUGINS
12332
9841e312051d [gaim-migrate @ 14636]
Mark Doliner <markdoliner@pidgin.im>
parents: 12117
diff changeset
494 static gint
9841e312051d [gaim-migrate @ 14636]
Mark Doliner <markdoliner@pidgin.im>
parents: 12117
diff changeset
495 compare_plugins(gconstpointer a, gconstpointer b)
9841e312051d [gaim-migrate @ 14636]
Mark Doliner <markdoliner@pidgin.im>
parents: 12117
diff changeset
496 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
497 const PurplePlugin *plugina = a;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
498 const PurplePlugin *pluginb = b;
12332
9841e312051d [gaim-migrate @ 14636]
Mark Doliner <markdoliner@pidgin.im>
parents: 12117
diff changeset
499
9841e312051d [gaim-migrate @ 14636]
Mark Doliner <markdoliner@pidgin.im>
parents: 12117
diff changeset
500 return strcmp(plugina->info->name, pluginb->info->name);
9841e312051d [gaim-migrate @ 14636]
Mark Doliner <markdoliner@pidgin.im>
parents: 12117
diff changeset
501 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
502 #endif /* PURPLE_PLUGINS */
12332
9841e312051d [gaim-migrate @ 14636]
Mark Doliner <markdoliner@pidgin.im>
parents: 12117
diff changeset
503
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
504 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
505 purple_plugin_load(PurplePlugin *plugin)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
506 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
507 #ifdef PURPLE_PLUGINS
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
508 GList *dep_list = NULL;
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
509 GList *l;
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
510
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
511 g_return_val_if_fail(plugin != NULL, FALSE);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
512
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
513 if (purple_plugin_is_loaded(plugin))
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
514 return TRUE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
515
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
516 if (purple_plugin_is_unloadable(plugin))
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
517 return FALSE;
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
518
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
519 g_return_val_if_fail(plugin->error == NULL, FALSE);
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
520
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
521 /*
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
522 * Go through the list of the plugin's dependencies.
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
523 *
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
524 * First pass: Make sure all the plugins needed are probed.
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
525 */
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
526 for (l = plugin->info->dependencies; l != NULL; l = l->next)
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
527 {
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
528 const char *dep_name = (const char *)l->data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
529 PurplePlugin *dep_plugin;
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
530
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
531 dep_plugin = purple_plugins_find_with_id(dep_name);
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
532
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
533 if (dep_plugin == NULL)
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
534 {
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
535 char *tmp;
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
536
12983
a3fc5908dbf9 [gaim-migrate @ 15336]
Etan Reisner <deryni@pidgin.im>
parents: 12926
diff changeset
537 tmp = g_strdup_printf(_("The required plugin %s was not found. "
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
538 "Please install this plugin and try again."),
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
539 dep_name);
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
540
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
541 purple_notify_error(NULL, NULL,
15444
b793ef258d23 I think this changes every user-visible string that contains 'Gaim.' We probably want the UI to be able
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
542 _("Unable to load the plugin"), tmp);
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
543 g_free(tmp);
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
544
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14024
diff changeset
545 g_list_free(dep_list);
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
546
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
547 return FALSE;
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
548 }
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
549
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
550 dep_list = g_list_append(dep_list, dep_plugin);
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
551 }
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
552
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
553 /* Second pass: load all the required plugins. */
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
554 for (l = dep_list; l != NULL; l = l->next)
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
555 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
556 PurplePlugin *dep_plugin = (PurplePlugin *)l->data;
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
557
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
558 if (!purple_plugin_is_loaded(dep_plugin))
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
559 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
560 if (!purple_plugin_load(dep_plugin))
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
561 {
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
562 char *tmp;
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
563
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
564 tmp = g_strdup_printf(_("The required plugin %s was unable to load."),
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
565 plugin->info->name);
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
566
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
567 purple_notify_error(NULL, NULL,
15444
b793ef258d23 I think this changes every user-visible string that contains 'Gaim.' We probably want the UI to be able
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
568 _("Unable to load your plugin."), tmp);
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
569 g_free(tmp);
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
570
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14024
diff changeset
571 g_list_free(dep_list);
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
572
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
573 return FALSE;
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
574 }
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
575 }
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
576 }
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
577
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
578 /* Third pass: note that other plugins are dependencies of this plugin.
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
579 * This is done separately in case we had to bail out earlier. */
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
580 for (l = dep_list; l != NULL; l = l->next)
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
581 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
582 PurplePlugin *dep_plugin = (PurplePlugin *)l->data;
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
583 dep_plugin->dependent_plugins = g_list_prepend(dep_plugin->dependent_plugins, plugin->info->id);
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
584 }
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
585
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14024
diff changeset
586 g_list_free(dep_list);
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
587
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
588 if (plugin->native_plugin)
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
589 {
33769
96f89e35d24d Fix various "Dereference before null check" issues
Daniel Atallah <datallah@pidgin.im>
parents: 29491
diff changeset
590 if (plugin->info->load != NULL && !plugin->info->load(plugin))
96f89e35d24d Fix various "Dereference before null check" issues
Daniel Atallah <datallah@pidgin.im>
parents: 29491
diff changeset
591 return FALSE;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
592 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
593 else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
594 PurplePlugin *loader;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
595 PurplePluginLoaderInfo *loader_info;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
596
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
597 loader = find_loader_for_plugin(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
598
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
599 if (loader == NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
600 return FALSE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
601
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
602 loader_info = PURPLE_PLUGIN_LOADER_INFO(loader);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
603
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
604 if (loader_info->load != NULL)
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
605 {
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
606 if (!loader_info->load(plugin))
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
607 return FALSE;
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
608 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
609 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
610
12332
9841e312051d [gaim-migrate @ 14636]
Mark Doliner <markdoliner@pidgin.im>
parents: 12117
diff changeset
611 loaded_plugins = g_list_insert_sorted(loaded_plugins, plugin, compare_plugins);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
612
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
613 plugin->loaded = TRUE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
614
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
615 if (load_cb != NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
616 load_cb(plugin, load_cb_data);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
617
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
618 purple_signal_emit(purple_plugins_get_handle(), "plugin-load", plugin);
8986
30ba617356bb [gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents: 8759
diff changeset
619
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
620 return TRUE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
621
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
622 #else
5449
4c350eb7d4a0 [gaim-migrate @ 5836]
Decklin Foster <decklin@red-bean.com>
parents: 5443
diff changeset
623 return TRUE;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
624 #endif /* !PURPLE_PLUGINS */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
625 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
626
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
627 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
628 purple_plugin_unload(PurplePlugin *plugin)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
629 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
630 #ifdef PURPLE_PLUGINS
12992
4bb06c9c1fb3 [gaim-migrate @ 15345]
Richard Laager <rlaager@pidgin.im>
parents: 12985
diff changeset
631 GList *l;
20805
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
632 GList *ll;
12985
65f337c1a17e [gaim-migrate @ 15338]
Etan Reisner <deryni@pidgin.im>
parents: 12983
diff changeset
633
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
634 g_return_val_if_fail(plugin != NULL, FALSE);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
635 g_return_val_if_fail(purple_plugin_is_loaded(plugin), FALSE);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
636
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
637 purple_debug_info("plugins", "Unloading plugin %s\n", plugin->info->name);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
638
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
639 /* Unload all plugins that depend on this plugin. */
20863
1fb9e7564f5d Fix a syntax error so this compiles.
Richard Laager <rlaager@pidgin.im>
parents: 20806
diff changeset
640 for (l = plugin->dependent_plugins; l != NULL; l = ll) {
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
641 const char * dep_name = (const char *)l->data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
642 PurplePlugin *dep_plugin;
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
643
20805
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
644 /* Store a pointer to the next element in the list.
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
645 * This is because we'll be modifying this list in the loop. */
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
646 ll = l->next;
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
647
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
648 dep_plugin = purple_plugins_find_with_id(dep_name);
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
649
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
650 if (dep_plugin != NULL && purple_plugin_is_loaded(dep_plugin))
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
651 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
652 if (!purple_plugin_unload(dep_plugin))
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
653 {
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
654 g_free(plugin->error);
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
655 plugin->error = g_strdup_printf(_("%s requires %s, but it failed to unload."),
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
656 _(plugin->info->name),
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
657 _(dep_plugin->info->name));
20805
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
658 return FALSE;
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
659 }
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
660 else
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
661 {
22090
71cbb3d611d3 Fix a double-free when unloading dependent plugins. Fixes #4488.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21682
diff changeset
662 #if 0
71cbb3d611d3 Fix a double-free when unloading dependent plugins. Fixes #4488.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21682
diff changeset
663 /* This isn't necessary. This has already been done when unloading dep_plugin. */
20865
e35ee4fd6d45 Use g_list_delete_link() instead of g_list_remove() in this new code, as
Richard Laager <rlaager@pidgin.im>
parents: 20864
diff changeset
664 plugin->dependent_plugins = g_list_delete_link(plugin->dependent_plugins, l);
22090
71cbb3d611d3 Fix a double-free when unloading dependent plugins. Fixes #4488.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21682
diff changeset
665 #endif
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
666 }
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
667 }
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
668 }
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
669
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
670 /* Remove this plugin from each dependency's dependent_plugins list. */
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
671 for (l = plugin->info->dependencies; l != NULL; l = l->next)
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
672 {
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
673 const char *dep_name = (const char *)l->data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
674 PurplePlugin *dependency;
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
675
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
676 dependency = purple_plugins_find_with_id(dep_name);
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
677
18889
2eda48021b49 Fix core plugin dependency registering for gtkbuddynote to happen in plugin_init() so that it can work correctly. Add an additional sanity check in the core plugin unloading so that messed up dependency registrations don't cause crashes in the future. Thanks to deryni for helping figure this out.
Daniel Atallah <datallah@pidgin.im>
parents: 16006
diff changeset
678 if (dependency != NULL)
2eda48021b49 Fix core plugin dependency registering for gtkbuddynote to happen in plugin_init() so that it can work correctly. Add an additional sanity check in the core plugin unloading so that messed up dependency registrations don't cause crashes in the future. Thanks to deryni for helping figure this out.
Daniel Atallah <datallah@pidgin.im>
parents: 16006
diff changeset
679 dependency->dependent_plugins = g_list_remove(dependency->dependent_plugins, plugin->info->id);
2eda48021b49 Fix core plugin dependency registering for gtkbuddynote to happen in plugin_init() so that it can work correctly. Add an additional sanity check in the core plugin unloading so that messed up dependency registrations don't cause crashes in the future. Thanks to deryni for helping figure this out.
Daniel Atallah <datallah@pidgin.im>
parents: 16006
diff changeset
680 else
2eda48021b49 Fix core plugin dependency registering for gtkbuddynote to happen in plugin_init() so that it can work correctly. Add an additional sanity check in the core plugin unloading so that messed up dependency registrations don't cause crashes in the future. Thanks to deryni for helping figure this out.
Daniel Atallah <datallah@pidgin.im>
parents: 16006
diff changeset
681 purple_debug_error("plugins", "Unable to remove from dependency list for %s\n", dep_name);
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
682 }
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
683
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
684 if (plugin->native_plugin) {
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
685 if (plugin->info->unload && !plugin->info->unload(plugin))
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
686 return FALSE;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
687
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
688 if (plugin->info->type == PURPLE_PLUGIN_PROTOCOL) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
689 PurplePluginProtocolInfo *prpl_info;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
690 GList *l;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
691
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
692 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
693
5638
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5573
diff changeset
694 for (l = prpl_info->user_splits; l != NULL; l = l->next)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
695 purple_account_user_split_destroy(l->data);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
696
5638
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5573
diff changeset
697 for (l = prpl_info->protocol_options; l != NULL; l = l->next)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
698 purple_account_option_destroy(l->data);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
699
12117
b3781ac3f1da [gaim-migrate @ 14417]
Nathan Walp <nwalp@pidgin.im>
parents: 12081
diff changeset
700 if (prpl_info->user_splits != NULL) {
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5638
diff changeset
701 g_list_free(prpl_info->user_splits);
12117
b3781ac3f1da [gaim-migrate @ 14417]
Nathan Walp <nwalp@pidgin.im>
parents: 12081
diff changeset
702 prpl_info->user_splits = NULL;
b3781ac3f1da [gaim-migrate @ 14417]
Nathan Walp <nwalp@pidgin.im>
parents: 12081
diff changeset
703 }
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5638
diff changeset
704
12117
b3781ac3f1da [gaim-migrate @ 14417]
Nathan Walp <nwalp@pidgin.im>
parents: 12081
diff changeset
705 if (prpl_info->protocol_options != NULL) {
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5638
diff changeset
706 g_list_free(prpl_info->protocol_options);
12117
b3781ac3f1da [gaim-migrate @ 14417]
Nathan Walp <nwalp@pidgin.im>
parents: 12081
diff changeset
707 prpl_info->protocol_options = NULL;
b3781ac3f1da [gaim-migrate @ 14417]
Nathan Walp <nwalp@pidgin.im>
parents: 12081
diff changeset
708 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
709 }
20805
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
710 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
711 PurplePlugin *loader;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
712 PurplePluginLoaderInfo *loader_info;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
713
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
714 loader = find_loader_for_plugin(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
715
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
716 if (loader == NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
717 return FALSE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
718
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
719 loader_info = PURPLE_PLUGIN_LOADER_INFO(loader);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
720
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
721 if (loader_info->unload && !loader_info->unload(plugin))
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
722 return FALSE;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
723 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
724
20805
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
725 /* cancel any pending dialogs the plugin has */
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
726 purple_request_close_with_handle(plugin);
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
727 purple_notify_close_with_handle(plugin);
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
728
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
729 purple_signals_disconnect_by_handle(plugin);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
730 purple_plugin_ipc_unregister_all(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
731
20805
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
732 loaded_plugins = g_list_remove(loaded_plugins, plugin);
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
733 if ((plugin->info != NULL) && PURPLE_IS_PROTOCOL_PLUGIN(plugin))
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
734 protocol_plugins = g_list_remove(protocol_plugins, plugin);
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
735 plugins_to_disable = g_list_remove(plugins_to_disable, plugin);
20805
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
736 plugin->loaded = FALSE;
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
737
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
738 /* We wouldn't be anywhere near here if the plugin wasn't loaded, so
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
739 * if plugin->error is set at all, it had to be from a previous
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
740 * unload failure. It's obviously okay now.
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
741 */
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
742 g_free(plugin->error);
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
743 plugin->error = NULL;
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
744
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
745 if (unload_cb != NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
746 unload_cb(plugin, unload_cb_data);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
747
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
748 purple_signal_emit(purple_plugins_get_handle(), "plugin-unload", plugin);
8986
30ba617356bb [gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents: 8759
diff changeset
749
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
750 purple_prefs_disconnect_by_handle(plugin);
10087
e5b80a38939d [gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9943
diff changeset
751
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
752 return TRUE;
5449
4c350eb7d4a0 [gaim-migrate @ 5836]
Decklin Foster <decklin@red-bean.com>
parents: 5443
diff changeset
753 #else
4c350eb7d4a0 [gaim-migrate @ 5836]
Decklin Foster <decklin@red-bean.com>
parents: 5443
diff changeset
754 return TRUE;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
755 #endif /* PURPLE_PLUGINS */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
756 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
757
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
758 void
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
759 purple_plugin_disable(PurplePlugin *plugin)
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
760 {
21599
aab11d2102a3 Compile when plugins are disabled
Mark Doliner <markdoliner@pidgin.im>
parents: 20870
diff changeset
761 #ifdef PURPLE_PLUGINS
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
762 g_return_if_fail(plugin != NULL);
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
763
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
764 if (!g_list_find(plugins_to_disable, plugin))
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
765 plugins_to_disable = g_list_prepend(plugins_to_disable, plugin);
21599
aab11d2102a3 Compile when plugins are disabled
Mark Doliner <markdoliner@pidgin.im>
parents: 20870
diff changeset
766 #endif
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
767 }
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
768
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
769 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
770 purple_plugin_reload(PurplePlugin *plugin)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
771 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
772 #ifdef PURPLE_PLUGINS
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
773 g_return_val_if_fail(plugin != NULL, FALSE);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
774 g_return_val_if_fail(purple_plugin_is_loaded(plugin), FALSE);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
775
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
776 if (!purple_plugin_unload(plugin))
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
777 return FALSE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
778
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
779 if (!purple_plugin_load(plugin))
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
780 return FALSE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
781
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
782 return TRUE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
783 #else
5449
4c350eb7d4a0 [gaim-migrate @ 5836]
Decklin Foster <decklin@red-bean.com>
parents: 5443
diff changeset
784 return TRUE;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
785 #endif /* !PURPLE_PLUGINS */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
786 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
787
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
788 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
789 purple_plugin_destroy(PurplePlugin *plugin)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
790 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
791 #ifdef PURPLE_PLUGINS
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
792 g_return_if_fail(plugin != NULL);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
793
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
794 if (purple_plugin_is_loaded(plugin))
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
795 purple_plugin_unload(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
796
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
797 plugins = g_list_remove(plugins, plugin);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
798
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
799 if (load_queue != NULL)
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
800 load_queue = g_list_remove(load_queue, plugin);
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
801
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
802 /* true, this may leak a little memory if there is a major version
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
803 * mismatch, but it's a lot better than trying to free something
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
804 * we shouldn't, and crashing while trying to load an old plugin */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
805 if(plugin->info == NULL || plugin->info->magic != PURPLE_PLUGIN_MAGIC ||
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
806 plugin->info->major_version != PURPLE_MAJOR_VERSION)
14024
60730ce4455c [gaim-migrate @ 16515]
Mark Doliner <markdoliner@pidgin.im>
parents: 14016
diff changeset
807 {
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
808 if(plugin->handle)
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
809 g_module_close(plugin->handle);
13136
0438506e90ac [gaim-migrate @ 15497]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13107
diff changeset
810
14024
60730ce4455c [gaim-migrate @ 16515]
Mark Doliner <markdoliner@pidgin.im>
parents: 14016
diff changeset
811 g_free(plugin->path);
60730ce4455c [gaim-migrate @ 16515]
Mark Doliner <markdoliner@pidgin.im>
parents: 14016
diff changeset
812 g_free(plugin->error);
60730ce4455c [gaim-migrate @ 16515]
Mark Doliner <markdoliner@pidgin.im>
parents: 14016
diff changeset
813
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
814 PURPLE_DBUS_UNREGISTER_POINTER(plugin);
14024
60730ce4455c [gaim-migrate @ 16515]
Mark Doliner <markdoliner@pidgin.im>
parents: 14016
diff changeset
815
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
816 g_free(plugin);
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
817 return;
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
818 }
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
819
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14024
diff changeset
820 if (plugin->info != NULL)
5243
e8d35a430c6d [gaim-migrate @ 5614]
Christian Hammond <chipx86@chipx86.com>
parents: 5242
diff changeset
821 g_list_free(plugin->info->dependencies);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
822
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
823 if (plugin->native_plugin)
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
824 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
825 if (plugin->info != NULL && plugin->info->type == PURPLE_PLUGIN_LOADER)
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
826 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
827 PurplePluginLoaderInfo *loader_info;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
828 GList *exts, *l, *next_l;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
829 PurplePlugin *p2;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
830
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
831 loader_info = PURPLE_PLUGIN_LOADER_INFO(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
832
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
833 if (loader_info != NULL && loader_info->exts != NULL)
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
834 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
835 for (exts = PURPLE_PLUGIN_LOADER_INFO(plugin)->exts;
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
836 exts != NULL;
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
837 exts = exts->next) {
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
838
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
839 for (l = purple_plugins_get_all(); l != NULL; l = next_l)
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
840 {
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
841 next_l = l->next;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
842
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
843 p2 = l->data;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
844
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
845 if (p2->path != NULL &&
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
846 has_file_extension(p2->path, exts->data))
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
847 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
848 purple_plugin_destroy(p2);
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
849 }
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
850 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
851 }
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
852
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
853 g_list_free(loader_info->exts);
27600
3dc3d3b901ab NULL-ify the loader_info->exts member. Fixes a crash if UIs repeatedly init
Etan Reisner <deryni@pidgin.im>
parents: 27593
diff changeset
854 loader_info->exts = NULL;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
855 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
856
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
857 plugin_loaders = g_list_remove(plugin_loaders, plugin);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
858 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
859
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
860 if (plugin->info != NULL && plugin->info->destroy != NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
861 plugin->info->destroy(plugin);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
862
27859
27ae46ac08d3 Add PURPLE_LEAKCHECK_HELP environment variable. See ChangeLog.
Paul Aurich <darkrain42@pidgin.im>
parents: 27603
diff changeset
863 /*
27ae46ac08d3 Add PURPLE_LEAKCHECK_HELP environment variable. See ChangeLog.
Paul Aurich <darkrain42@pidgin.im>
parents: 27603
diff changeset
864 * I find it extremely useful to do this when using valgrind, as
27ae46ac08d3 Add PURPLE_LEAKCHECK_HELP environment variable. See ChangeLog.
Paul Aurich <darkrain42@pidgin.im>
parents: 27603
diff changeset
865 * it keeps all the plugins open, meaning that valgrind is able to
27ae46ac08d3 Add PURPLE_LEAKCHECK_HELP environment variable. See ChangeLog.
Paul Aurich <darkrain42@pidgin.im>
parents: 27603
diff changeset
866 * resolve symbol names in leak traces from plugins.
27ae46ac08d3 Add PURPLE_LEAKCHECK_HELP environment variable. See ChangeLog.
Paul Aurich <darkrain42@pidgin.im>
parents: 27603
diff changeset
867 */
27973
dadadccfb951 Automatically detect if running under valgrind and don't close plugin
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 27859
diff changeset
868 if (!g_getenv("PURPLE_LEAKCHECK_HELP") && !RUNNING_ON_VALGRIND)
27859
27ae46ac08d3 Add PURPLE_LEAKCHECK_HELP environment variable. See ChangeLog.
Paul Aurich <darkrain42@pidgin.im>
parents: 27603
diff changeset
869 {
27ae46ac08d3 Add PURPLE_LEAKCHECK_HELP environment variable. See ChangeLog.
Paul Aurich <darkrain42@pidgin.im>
parents: 27603
diff changeset
870 if (plugin->handle != NULL)
27ae46ac08d3 Add PURPLE_LEAKCHECK_HELP environment variable. See ChangeLog.
Paul Aurich <darkrain42@pidgin.im>
parents: 27603
diff changeset
871 g_module_close(plugin->handle);
27ae46ac08d3 Add PURPLE_LEAKCHECK_HELP environment variable. See ChangeLog.
Paul Aurich <darkrain42@pidgin.im>
parents: 27603
diff changeset
872 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
873 }
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
874 else
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
875 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
876 PurplePlugin *loader;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
877 PurplePluginLoaderInfo *loader_info;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
878
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
879 loader = find_loader_for_plugin(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
880
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
881 if (loader != NULL)
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
882 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
883 loader_info = PURPLE_PLUGIN_LOADER_INFO(loader);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
884
5941
46e136a842b8 [gaim-migrate @ 6381]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
885 if (loader_info->destroy != NULL)
46e136a842b8 [gaim-migrate @ 6381]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
886 loader_info->destroy(plugin);
46e136a842b8 [gaim-migrate @ 6381]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
887 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
888 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
889
14016
2d2e0f347601 [gaim-migrate @ 16502]
Mark Doliner <markdoliner@pidgin.im>
parents: 13670
diff changeset
890 g_free(plugin->path);
2d2e0f347601 [gaim-migrate @ 16502]
Mark Doliner <markdoliner@pidgin.im>
parents: 13670
diff changeset
891 g_free(plugin->error);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
892
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
893 PURPLE_DBUS_UNREGISTER_POINTER(plugin);
13136
0438506e90ac [gaim-migrate @ 15497]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13107
diff changeset
894
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
895 g_free(plugin);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
896 #endif /* !PURPLE_PLUGINS */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
897 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
898
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
899 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
900 purple_plugin_is_loaded(const PurplePlugin *plugin)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
901 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
902 g_return_val_if_fail(plugin != NULL, FALSE);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
903
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
904 return plugin->loaded;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
905 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
906
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
907 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
908 purple_plugin_is_unloadable(const PurplePlugin *plugin)
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
909 {
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
910 g_return_val_if_fail(plugin != NULL, FALSE);
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
911
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
912 return plugin->unloadable;
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
913 }
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
914
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
915 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
916 purple_plugin_get_id(const PurplePlugin *plugin) {
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
917 g_return_val_if_fail(plugin, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
918 g_return_val_if_fail(plugin->info, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
919
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
920 return plugin->info->id;
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
921 }
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
922
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
923 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
924 purple_plugin_get_name(const PurplePlugin *plugin) {
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
925 g_return_val_if_fail(plugin, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
926 g_return_val_if_fail(plugin->info, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
927
22533
7e1e39d5db7e Allow translation/transliteration foo in the plugin window tooltip.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22090
diff changeset
928 return _(plugin->info->name);
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
929 }
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
930
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
931 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
932 purple_plugin_get_version(const PurplePlugin *plugin) {
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
933 g_return_val_if_fail(plugin, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
934 g_return_val_if_fail(plugin->info, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
935
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
936 return plugin->info->version;
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
937 }
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
938
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
939 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
940 purple_plugin_get_summary(const PurplePlugin *plugin) {
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
941 g_return_val_if_fail(plugin, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
942 g_return_val_if_fail(plugin->info, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
943
22533
7e1e39d5db7e Allow translation/transliteration foo in the plugin window tooltip.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22090
diff changeset
944 return _(plugin->info->summary);
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
945 }
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
946
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
947 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
948 purple_plugin_get_description(const PurplePlugin *plugin) {
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
949 g_return_val_if_fail(plugin, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
950 g_return_val_if_fail(plugin->info, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
951
22533
7e1e39d5db7e Allow translation/transliteration foo in the plugin window tooltip.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22090
diff changeset
952 return _(plugin->info->description);
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
953 }
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
954
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
955 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
956 purple_plugin_get_author(const PurplePlugin *plugin) {
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
957 g_return_val_if_fail(plugin, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
958 g_return_val_if_fail(plugin->info, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
959
22533
7e1e39d5db7e Allow translation/transliteration foo in the plugin window tooltip.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22090
diff changeset
960 return _(plugin->info->author);
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
961 }
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
962
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
963 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
964 purple_plugin_get_homepage(const PurplePlugin *plugin) {
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
965 g_return_val_if_fail(plugin, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
966 g_return_val_if_fail(plugin->info, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
967
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
968 return plugin->info->homepage;
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
969 }
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
970
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
971 /**************************************************************************
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
972 * Plugin IPC
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
973 **************************************************************************/
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
974 static void
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
975 destroy_ipc_info(void *data)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
976 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
977 PurplePluginIpcCommand *ipc_command = (PurplePluginIpcCommand *)data;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
978 int i;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
979
9667
f66efc2631b3 [gaim-migrate @ 10519]
Christian Hammond <chipx86@chipx86.com>
parents: 9018
diff changeset
980 if (ipc_command->params != NULL)
f66efc2631b3 [gaim-migrate @ 10519]
Christian Hammond <chipx86@chipx86.com>
parents: 9018
diff changeset
981 {
f66efc2631b3 [gaim-migrate @ 10519]
Christian Hammond <chipx86@chipx86.com>
parents: 9018
diff changeset
982 for (i = 0; i < ipc_command->num_params; i++)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
983 purple_value_destroy(ipc_command->params[i]);
9667
f66efc2631b3 [gaim-migrate @ 10519]
Christian Hammond <chipx86@chipx86.com>
parents: 9018
diff changeset
984
f66efc2631b3 [gaim-migrate @ 10519]
Christian Hammond <chipx86@chipx86.com>
parents: 9018
diff changeset
985 g_free(ipc_command->params);
f66efc2631b3 [gaim-migrate @ 10519]
Christian Hammond <chipx86@chipx86.com>
parents: 9018
diff changeset
986 }
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
987
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
988 if (ipc_command->ret_value != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
989 purple_value_destroy(ipc_command->ret_value);
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
990
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
991 g_free(ipc_command);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
992 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
993
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
994 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
995 purple_plugin_ipc_register(PurplePlugin *plugin, const char *command,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
996 PurpleCallback func, PurpleSignalMarshalFunc marshal,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
997 PurpleValue *ret_value, int num_params, ...)
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
998 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
999 PurplePluginIpcInfo *ipc_info;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1000 PurplePluginIpcCommand *ipc_command;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1001
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1002 g_return_val_if_fail(plugin != NULL, FALSE);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1003 g_return_val_if_fail(command != NULL, FALSE);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1004 g_return_val_if_fail(func != NULL, FALSE);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1005 g_return_val_if_fail(marshal != NULL, FALSE);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1006
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1007 if (plugin->ipc_data == NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1008 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1009 ipc_info = plugin->ipc_data = g_new0(PurplePluginIpcInfo, 1);
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1010 ipc_info->commands = g_hash_table_new_full(g_str_hash, g_str_equal,
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1011 g_free, destroy_ipc_info);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1012 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1013 else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1014 ipc_info = (PurplePluginIpcInfo *)plugin->ipc_data;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1015
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1016 ipc_command = g_new0(PurplePluginIpcCommand, 1);
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1017 ipc_command->func = func;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1018 ipc_command->marshal = marshal;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1019 ipc_command->num_params = num_params;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1020 ipc_command->ret_value = ret_value;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1021
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1022 if (num_params > 0)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1023 {
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1024 va_list args;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1025 int i;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1026
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1027 ipc_command->params = g_new0(PurpleValue *, num_params);
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1028
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1029 va_start(args, num_params);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1030
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1031 for (i = 0; i < num_params; i++)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1032 ipc_command->params[i] = va_arg(args, PurpleValue *);
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1033
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1034 va_end(args);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1035 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1036
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1037 g_hash_table_replace(ipc_info->commands, g_strdup(command), ipc_command);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1038
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1039 ipc_info->command_count++;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1040
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1041 return TRUE;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1042 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1043
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1044 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1045 purple_plugin_ipc_unregister(PurplePlugin *plugin, const char *command)
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1046 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1047 PurplePluginIpcInfo *ipc_info;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1048
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1049 g_return_if_fail(plugin != NULL);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1050 g_return_if_fail(command != NULL);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1051
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1052 ipc_info = (PurplePluginIpcInfo *)plugin->ipc_data;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1053
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1054 if (ipc_info == NULL ||
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1055 g_hash_table_lookup(ipc_info->commands, command) == NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1056 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1057 purple_debug_error("plugins",
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1058 "IPC command '%s' was not registered for plugin %s\n",
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1059 command, plugin->info->name);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1060 return;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1061 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1062
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1063 g_hash_table_remove(ipc_info->commands, command);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1064
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1065 ipc_info->command_count--;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1066
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1067 if (ipc_info->command_count == 0)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1068 {
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1069 g_hash_table_destroy(ipc_info->commands);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1070 g_free(ipc_info);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1071
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1072 plugin->ipc_data = NULL;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1073 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1074 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1075
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1076 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1077 purple_plugin_ipc_unregister_all(PurplePlugin *plugin)
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1078 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1079 PurplePluginIpcInfo *ipc_info;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1080
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1081 g_return_if_fail(plugin != NULL);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1082
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1083 if (plugin->ipc_data == NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1084 return; /* Silently ignore it. */
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1085
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1086 ipc_info = (PurplePluginIpcInfo *)plugin->ipc_data;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1087
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1088 g_hash_table_destroy(ipc_info->commands);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1089 g_free(ipc_info);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1090
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1091 plugin->ipc_data = NULL;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1092 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1093
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1094 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1095 purple_plugin_ipc_get_params(PurplePlugin *plugin, const char *command,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1096 PurpleValue **ret_value, int *num_params,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1097 PurpleValue ***params)
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1098 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1099 PurplePluginIpcInfo *ipc_info;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1100 PurplePluginIpcCommand *ipc_command;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1101
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1102 g_return_val_if_fail(plugin != NULL, FALSE);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1103 g_return_val_if_fail(command != NULL, FALSE);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1104
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1105 ipc_info = (PurplePluginIpcInfo *)plugin->ipc_data;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1106
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1107 if (ipc_info == NULL ||
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1108 (ipc_command = g_hash_table_lookup(ipc_info->commands,
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1109 command)) == NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1110 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1111 purple_debug_error("plugins",
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1112 "IPC command '%s' was not registered for plugin %s\n",
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1113 command, plugin->info->name);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1114
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1115 return FALSE;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1116 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1117
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1118 if (num_params != NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1119 *num_params = ipc_command->num_params;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1120
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1121 if (params != NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1122 *params = ipc_command->params;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1123
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1124 if (ret_value != NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1125 *ret_value = ipc_command->ret_value;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1126
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1127 return TRUE;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1128 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1129
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1130 void *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1131 purple_plugin_ipc_call(PurplePlugin *plugin, const char *command,
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1132 gboolean *ok, ...)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1133 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1134 PurplePluginIpcInfo *ipc_info;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1135 PurplePluginIpcCommand *ipc_command;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1136 va_list args;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1137 void *ret_value;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1138
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1139 if (ok != NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1140 *ok = FALSE;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1141
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1142 g_return_val_if_fail(plugin != NULL, NULL);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1143 g_return_val_if_fail(command != NULL, NULL);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1144
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1145 ipc_info = (PurplePluginIpcInfo *)plugin->ipc_data;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1146
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1147 if (ipc_info == NULL ||
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1148 (ipc_command = g_hash_table_lookup(ipc_info->commands,
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1149 command)) == NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1150 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1151 purple_debug_error("plugins",
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1152 "IPC command '%s' was not registered for plugin %s\n",
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1153 command, plugin->info->name);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1154
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1155 return NULL;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1156 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1157
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1158 va_start(args, ok);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1159 ipc_command->marshal(ipc_command->func, args, NULL, &ret_value);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1160 va_end(args);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1161
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1162 if (ok != NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1163 *ok = TRUE;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1164
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1165 return ret_value;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1166 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1167
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1168 /**************************************************************************
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1169 * Plugins subsystem
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1170 **************************************************************************/
10479
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1171 void *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1172 purple_plugins_get_handle(void) {
10479
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1173 static int handle;
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1174
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1175 return &handle;
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1176 }
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1177
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1178 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1179 purple_plugins_init(void) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1180 void *handle = purple_plugins_get_handle();
10479
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1181
21143
239b2f43bef5 Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <deryni@pidgin.im>
parents: 20190
diff changeset
1182 purple_plugins_add_search_path(LIBDIR);
15523
8505bd287c48 This renames the binary to 'pidgin', and I think it properly
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
1183
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1184 purple_signal_register(handle, "plugin-load",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1185 purple_marshal_VOID__POINTER,
10479
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1186 NULL, 1,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1187 purple_value_new(PURPLE_TYPE_SUBTYPE,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1188 PURPLE_SUBTYPE_PLUGIN));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1189 purple_signal_register(handle, "plugin-unload",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1190 purple_marshal_VOID__POINTER,
10479
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1191 NULL, 1,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1192 purple_value_new(PURPLE_TYPE_SUBTYPE,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1193 PURPLE_SUBTYPE_PLUGIN));
10479
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1194 }
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1195
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1196 void
21143
239b2f43bef5 Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <deryni@pidgin.im>
parents: 20190
diff changeset
1197 purple_plugins_uninit(void)
239b2f43bef5 Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <deryni@pidgin.im>
parents: 20190
diff changeset
1198 {
239b2f43bef5 Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <deryni@pidgin.im>
parents: 20190
diff changeset
1199 void *handle = purple_plugins_get_handle();
239b2f43bef5 Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <deryni@pidgin.im>
parents: 20190
diff changeset
1200
239b2f43bef5 Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <deryni@pidgin.im>
parents: 20190
diff changeset
1201 purple_signals_disconnect_by_handle(handle);
239b2f43bef5 Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <deryni@pidgin.im>
parents: 20190
diff changeset
1202 purple_signals_unregister_by_instance(handle);
26744
ac7a89587cad Various libpurple uninit memory cleanups.
Nick Hebner <hebnern@gmail.com>
parents: 25865
diff changeset
1203
ac7a89587cad Various libpurple uninit memory cleanups.
Nick Hebner <hebnern@gmail.com>
parents: 25865
diff changeset
1204 while (search_paths) {
ac7a89587cad Various libpurple uninit memory cleanups.
Nick Hebner <hebnern@gmail.com>
parents: 25865
diff changeset
1205 g_free(search_paths->data);
ac7a89587cad Various libpurple uninit memory cleanups.
Nick Hebner <hebnern@gmail.com>
parents: 25865
diff changeset
1206 search_paths = g_list_delete_link(search_paths, search_paths);
ac7a89587cad Various libpurple uninit memory cleanups.
Nick Hebner <hebnern@gmail.com>
parents: 25865
diff changeset
1207 }
10479
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1208 }
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1209
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1210 /**************************************************************************
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1211 * Plugins API
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1212 **************************************************************************/
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1213 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1214 purple_plugins_add_search_path(const char *path)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1215 {
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1216 g_return_if_fail(path != NULL);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1217
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1218 if (g_list_find_custom(search_paths, path, (GCompareFunc)strcmp))
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1219 return;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1220
22875
50a1371d084c Use g_strdup() instead of strdup (doesn't really matter as it is never
Daniel Atallah <datallah@pidgin.im>
parents: 22867
diff changeset
1221 search_paths = g_list_append(search_paths, g_strdup(path));
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1222 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1223
27583
616b68fe423f Add a purple_plugins_get_search_paths function.
Etan Reisner <deryni@pidgin.im>
parents: 26751
diff changeset
1224 GList *
616b68fe423f Add a purple_plugins_get_search_paths function.
Etan Reisner <deryni@pidgin.im>
parents: 26751
diff changeset
1225 purple_plugins_get_search_paths()
616b68fe423f Add a purple_plugins_get_search_paths function.
Etan Reisner <deryni@pidgin.im>
parents: 26751
diff changeset
1226 {
616b68fe423f Add a purple_plugins_get_search_paths function.
Etan Reisner <deryni@pidgin.im>
parents: 26751
diff changeset
1227 return search_paths;
616b68fe423f Add a purple_plugins_get_search_paths function.
Etan Reisner <deryni@pidgin.im>
parents: 26751
diff changeset
1228 }
616b68fe423f Add a purple_plugins_get_search_paths function.
Etan Reisner <deryni@pidgin.im>
parents: 26751
diff changeset
1229
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1230 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1231 purple_plugins_unload_all(void)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1232 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1233 #ifdef PURPLE_PLUGINS
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1234
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1235 while (loaded_plugins != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1236 purple_plugin_unload(loaded_plugins->data);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1237
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1238 #endif /* PURPLE_PLUGINS */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1239 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1240
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1241 void
26751
4b0dffa16ffe Apply patch from darkrain42 to fix the crash-on-exit. Hopefully, the order
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26744
diff changeset
1242 purple_plugins_unload(PurplePluginType type)
4b0dffa16ffe Apply patch from darkrain42 to fix the crash-on-exit. Hopefully, the order
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26744
diff changeset
1243 {
4b0dffa16ffe Apply patch from darkrain42 to fix the crash-on-exit. Hopefully, the order
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26744
diff changeset
1244 #ifdef PURPLE_PLUGINS
4b0dffa16ffe Apply patch from darkrain42 to fix the crash-on-exit. Hopefully, the order
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26744
diff changeset
1245 GList *l;
4b0dffa16ffe Apply patch from darkrain42 to fix the crash-on-exit. Hopefully, the order
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26744
diff changeset
1246
4b0dffa16ffe Apply patch from darkrain42 to fix the crash-on-exit. Hopefully, the order
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26744
diff changeset
1247 for (l = plugins; l; l = l->next) {
4b0dffa16ffe Apply patch from darkrain42 to fix the crash-on-exit. Hopefully, the order
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26744
diff changeset
1248 PurplePlugin *plugin = l->data;
4b0dffa16ffe Apply patch from darkrain42 to fix the crash-on-exit. Hopefully, the order
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26744
diff changeset
1249 if (plugin->info->type == type && purple_plugin_is_loaded(plugin))
4b0dffa16ffe Apply patch from darkrain42 to fix the crash-on-exit. Hopefully, the order
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26744
diff changeset
1250 purple_plugin_unload(plugin);
4b0dffa16ffe Apply patch from darkrain42 to fix the crash-on-exit. Hopefully, the order
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26744
diff changeset
1251 }
4b0dffa16ffe Apply patch from darkrain42 to fix the crash-on-exit. Hopefully, the order
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26744
diff changeset
1252
4b0dffa16ffe Apply patch from darkrain42 to fix the crash-on-exit. Hopefully, the order
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26744
diff changeset
1253 #endif /* PURPLE_PLUGINS */
4b0dffa16ffe Apply patch from darkrain42 to fix the crash-on-exit. Hopefully, the order
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26744
diff changeset
1254 }
4b0dffa16ffe Apply patch from darkrain42 to fix the crash-on-exit. Hopefully, the order
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26744
diff changeset
1255
4b0dffa16ffe Apply patch from darkrain42 to fix the crash-on-exit. Hopefully, the order
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26744
diff changeset
1256 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1257 purple_plugins_destroy_all(void)
5242
155da5e9bbf0 [gaim-migrate @ 5613]
Christian Hammond <chipx86@chipx86.com>
parents: 5211
diff changeset
1258 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1259 #ifdef PURPLE_PLUGINS
5242
155da5e9bbf0 [gaim-migrate @ 5613]
Christian Hammond <chipx86@chipx86.com>
parents: 5211
diff changeset
1260
155da5e9bbf0 [gaim-migrate @ 5613]
Christian Hammond <chipx86@chipx86.com>
parents: 5211
diff changeset
1261 while (plugins != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1262 purple_plugin_destroy(plugins->data);
5242
155da5e9bbf0 [gaim-migrate @ 5613]
Christian Hammond <chipx86@chipx86.com>
parents: 5211
diff changeset
1263
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1264 #endif /* PURPLE_PLUGINS */
5242
155da5e9bbf0 [gaim-migrate @ 5613]
Christian Hammond <chipx86@chipx86.com>
parents: 5211
diff changeset
1265 }
5838
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1266
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1267 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1268 purple_plugins_save_loaded(const char *key)
15357
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1269 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1270 #ifdef PURPLE_PLUGINS
15357
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1271 GList *pl;
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1272 GList *files = NULL;
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1273
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1274 for (pl = purple_plugins_get_loaded(); pl != NULL; pl = pl->next) {
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
1275 PurplePlugin *plugin = pl->data;
15357
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1276
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
1277 if (plugin->info->type != PURPLE_PLUGIN_PROTOCOL &&
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
1278 plugin->info->type != PURPLE_PLUGIN_LOADER &&
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
1279 !g_list_find(plugins_to_disable, plugin)) {
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
1280 files = g_list_append(files, plugin->path);
15357
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1281 }
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1282 }
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1283
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1284 purple_prefs_set_path_list(key, files);
15357
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1285 g_list_free(files);
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1286 #endif
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1287 }
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1288
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1289 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1290 purple_plugins_load_saved(const char *key)
5838
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1291 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1292 #ifdef PURPLE_PLUGINS
5949
bb7cbf02dda9 [gaim-migrate @ 6393]
Christian Hammond <chipx86@chipx86.com>
parents: 5941
diff changeset
1293 GList *f, *files;
bb7cbf02dda9 [gaim-migrate @ 6393]
Christian Hammond <chipx86@chipx86.com>
parents: 5941
diff changeset
1294
bb7cbf02dda9 [gaim-migrate @ 6393]
Christian Hammond <chipx86@chipx86.com>
parents: 5941
diff changeset
1295 g_return_if_fail(key != NULL);
5838
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1296
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1297 files = purple_prefs_get_path_list(key);
5949
bb7cbf02dda9 [gaim-migrate @ 6393]
Christian Hammond <chipx86@chipx86.com>
parents: 5941
diff changeset
1298
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1299 for (f = files; f; f = f->next)
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1300 {
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1301 char *filename;
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1302 char *basename;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1303 PurplePlugin *plugin;
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1304
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1305 if (f->data == NULL)
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1306 continue;
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1307
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1308 filename = f->data;
13528
541152b0fad0 [gaim-migrate @ 15903]
Daniel Atallah <datallah@pidgin.im>
parents: 13311
diff changeset
1309
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1310 /*
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1311 * We don't know if the filename uses Windows or Unix path
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1312 * separators (because people might be sharing a prefs.xml
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1313 * file across systems), so we find the last occurrence
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1314 * of either.
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1315 */
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1316 basename = strrchr(filename, '/');
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1317 if ((basename == NULL) || (basename < strrchr(filename, '\\')))
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1318 basename = strrchr(filename, '\\');
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1319 if (basename != NULL)
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1320 basename++;
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1321
13528
541152b0fad0 [gaim-migrate @ 15903]
Daniel Atallah <datallah@pidgin.im>
parents: 13311
diff changeset
1322 /* Strip the extension */
13567
4ec075b1ae40 [gaim-migrate @ 15945]
Daniel Atallah <datallah@pidgin.im>
parents: 13528
diff changeset
1323 if (basename)
22867
ba95299d6ed4 Fix a bug where the list of loaded plugins would get removed when
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22533
diff changeset
1324 basename = purple_plugin_get_basename(basename);
13528
541152b0fad0 [gaim-migrate @ 15903]
Daniel Atallah <datallah@pidgin.im>
parents: 13311
diff changeset
1325
20190
e93c4e56e79f applied changes from 63162f419a649bdd77b85cff73c4c490ec863ed1
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
1326 if (((plugin = purple_plugins_find_with_filename(filename)) != NULL) ||
e93c4e56e79f applied changes from 63162f419a649bdd77b85cff73c4c490ec863ed1
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
1327 (basename && (plugin = purple_plugins_find_with_basename(basename)) != NULL) ||
e93c4e56e79f applied changes from 63162f419a649bdd77b85cff73c4c490ec863ed1
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
1328 ((plugin = purple_plugin_probe(filename)) != NULL))
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1329 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1330 purple_debug_info("plugins", "Loading saved plugin %s\n",
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1331 plugin->path);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1332 purple_plugin_load(plugin);
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1333 }
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1334 else
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1335 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1336 purple_debug_error("plugins", "Unable to find saved plugin %s\n",
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1337 filename);
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1338 }
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1339
13528
541152b0fad0 [gaim-migrate @ 15903]
Daniel Atallah <datallah@pidgin.im>
parents: 13311
diff changeset
1340 g_free(basename);
541152b0fad0 [gaim-migrate @ 15903]
Daniel Atallah <datallah@pidgin.im>
parents: 13311
diff changeset
1341
5838
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1342 g_free(f->data);
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1343 }
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1344
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1345 g_list_free(files);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1346 #endif /* PURPLE_PLUGINS */
5838
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1347 }
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1348
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1349
5242
155da5e9bbf0 [gaim-migrate @ 5613]
Christian Hammond <chipx86@chipx86.com>
parents: 5211
diff changeset
1350 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1351 purple_plugins_probe(const char *ext)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1352 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1353 #ifdef PURPLE_PLUGINS
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1354 GDir *dir;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1355 const gchar *file;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1356 gchar *path;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1357 PurplePlugin *plugin;
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1358 GList *cur;
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1359 const char *search_path;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1360
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1361 if (!g_module_supported())
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1362 return;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1363
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1364 /* Probe plugins */
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1365 for (cur = search_paths; cur != NULL; cur = cur->next)
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1366 {
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1367 search_path = cur->data;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1368
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1369 dir = g_dir_open(search_path, 0, NULL);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1370
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1371 if (dir != NULL)
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1372 {
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1373 while ((file = g_dir_read_name(dir)) != NULL)
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1374 {
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1375 path = g_build_filename(search_path, file, NULL);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1376
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1377 if (ext == NULL || has_file_extension(file, ext))
33794
716cbef8d1c6 Fix a number of additional trivial issues - unused variables, etc.
Daniel Atallah <datallah@pidgin.im>
parents: 33769
diff changeset
1378 purple_plugin_probe(path);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1379
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1380 g_free(path);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1381 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1382
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1383 g_dir_close(dir);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1384 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1385 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1386
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1387 /* See if we have any plugins waiting to load */
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1388 while (load_queue != NULL)
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1389 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1390 plugin = (PurplePlugin *)load_queue->data;
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1391
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1392 load_queue = g_list_remove(load_queue, plugin);
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1393
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1394 if (plugin == NULL || plugin->info == NULL)
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1395 continue;
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1396
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1397 if (plugin->info->type == PURPLE_PLUGIN_LOADER)
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1398 {
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1399 /* We'll just load this right now. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1400 if (!purple_plugin_load(plugin))
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1401 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1402 purple_plugin_destroy(plugin);
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1403
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1404 continue;
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1405 }
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1406
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1407 plugin_loaders = g_list_append(plugin_loaders, plugin);
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1408
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1409 for (cur = PURPLE_PLUGIN_LOADER_INFO(plugin)->exts;
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1410 cur != NULL;
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1411 cur = cur->next)
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1412 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1413 purple_plugins_probe(cur->data);
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1414 }
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1415 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1416 else if (plugin->info->type == PURPLE_PLUGIN_PROTOCOL)
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1417 {
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1418 /* We'll just load this right now. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1419 if (!purple_plugin_load(plugin))
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1420 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1421 purple_plugin_destroy(plugin);
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1422
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1423 continue;
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1424 }
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1425
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
1426 /* Make sure we don't load two PRPLs with the same name? */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1427 if (purple_find_prpl(plugin->info->id))
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1428 {
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1429 /* Nothing to see here--move along, move along */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1430 purple_plugin_destroy(plugin);
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1431
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1432 continue;
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1433 }
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1434
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1435 protocol_plugins = g_list_insert_sorted(protocol_plugins, plugin,
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1436 (GCompareFunc)compare_prpl);
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1437 }
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1438 }
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1439
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1440 if (probe_cb != NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1441 probe_cb(probe_cb_data);
20805
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
1442
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1443 #endif /* PURPLE_PLUGINS */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1444 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1445
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1446 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1447 purple_plugin_register(PurplePlugin *plugin)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1448 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1449 g_return_val_if_fail(plugin != NULL, FALSE);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1450
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1451 /* If this plugin has been registered already then exit */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1452 if (g_list_find(plugins, plugin))
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1453 return TRUE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1454
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1455 /* Ensure the plugin has the requisite information */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1456 if (plugin->info->type == PURPLE_PLUGIN_LOADER)
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1457 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1458 PurplePluginLoaderInfo *loader_info;
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1459
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1460 loader_info = PURPLE_PLUGIN_LOADER_INFO(plugin);
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1461
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
1462 if (loader_info == NULL)
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1463 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1464 purple_debug_error("plugins", "%s is not loadable, loader plugin missing loader_info\n",
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
1465 plugin->path);
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1466 return FALSE;
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1467 }
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1468 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1469 else if (plugin->info->type == PURPLE_PLUGIN_PROTOCOL)
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1470 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1471 PurplePluginProtocolInfo *prpl_info;
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1472
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1473 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin);
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1474
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
1475 if (prpl_info == NULL)
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1476 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1477 purple_debug_error("plugins", "%s is not loadable, protocol plugin missing prpl_info\n",
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
1478 plugin->path);
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1479 return FALSE;
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1480 }
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1481 }
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1482
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1483 #ifdef PURPLE_PLUGINS
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1484 /* This plugin should be probed and maybe loaded--add it to the queue */
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1485 load_queue = g_list_append(load_queue, plugin);
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
1486 #else
12081
26a81230ffb1 [gaim-migrate @ 14378]
Evan Schoenberg <evands@pidgin.im>
parents: 12077
diff changeset
1487 if (plugin->info != NULL)
26a81230ffb1 [gaim-migrate @ 14378]
Evan Schoenberg <evands@pidgin.im>
parents: 12077
diff changeset
1488 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1489 if (plugin->info->type == PURPLE_PLUGIN_PROTOCOL)
12081
26a81230ffb1 [gaim-migrate @ 14378]
Evan Schoenberg <evands@pidgin.im>
parents: 12077
diff changeset
1490 protocol_plugins = g_list_insert_sorted(protocol_plugins, plugin,
26a81230ffb1 [gaim-migrate @ 14378]
Evan Schoenberg <evands@pidgin.im>
parents: 12077
diff changeset
1491 (GCompareFunc)compare_prpl);
26a81230ffb1 [gaim-migrate @ 14378]
Evan Schoenberg <evands@pidgin.im>
parents: 12077
diff changeset
1492 if (plugin->info->load != NULL)
26a81230ffb1 [gaim-migrate @ 14378]
Evan Schoenberg <evands@pidgin.im>
parents: 12077
diff changeset
1493 if (!plugin->info->load(plugin))
26a81230ffb1 [gaim-migrate @ 14378]
Evan Schoenberg <evands@pidgin.im>
parents: 12077
diff changeset
1494 return FALSE;
26a81230ffb1 [gaim-migrate @ 14378]
Evan Schoenberg <evands@pidgin.im>
parents: 12077
diff changeset
1495 }
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
1496 #endif
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1497
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1498 plugins = g_list_append(plugins, plugin);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1499
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1500 return TRUE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1501 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1502
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1503 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1504 purple_plugins_enabled(void)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1505 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1506 #ifdef PURPLE_PLUGINS
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1507 return TRUE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1508 #else
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1509 return FALSE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1510 #endif
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1511 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1512
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1513 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1514 purple_plugins_register_probe_notify_cb(void (*func)(void *), void *data)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1515 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1516 probe_cb = func;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1517 probe_cb_data = data;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1518 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1519
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1520 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1521 purple_plugins_unregister_probe_notify_cb(void (*func)(void *))
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1522 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1523 probe_cb = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1524 probe_cb_data = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1525 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1526
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1527 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1528 purple_plugins_register_load_notify_cb(void (*func)(PurplePlugin *, void *),
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1529 void *data)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1530 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1531 load_cb = func;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1532 load_cb_data = data;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1533 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1534
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1535 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1536 purple_plugins_unregister_load_notify_cb(void (*func)(PurplePlugin *, void *))
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1537 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1538 load_cb = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1539 load_cb_data = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1540 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1541
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1542 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1543 purple_plugins_register_unload_notify_cb(void (*func)(PurplePlugin *, void *),
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1544 void *data)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1545 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1546 unload_cb = func;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1547 unload_cb_data = data;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1548 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1549
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1550 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1551 purple_plugins_unregister_unload_notify_cb(void (*func)(PurplePlugin *, void *))
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1552 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1553 unload_cb = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1554 unload_cb_data = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1555 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1556
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1557 PurplePlugin *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1558 purple_plugins_find_with_name(const char *name)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1559 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1560 PurplePlugin *plugin;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1561 GList *l;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1562
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1563 for (l = plugins; l != NULL; l = l->next) {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1564 plugin = l->data;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1565
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 24569
diff changeset
1566 if (purple_strequal(plugin->info->name, name))
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1567 return plugin;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1568 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1569
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1570 return NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1571 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1572
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1573 PurplePlugin *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1574 purple_plugins_find_with_filename(const char *filename)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1575 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1576 PurplePlugin *plugin;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1577 GList *l;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1578
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1579 for (l = plugins; l != NULL; l = l->next) {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1580 plugin = l->data;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1581
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 24569
diff changeset
1582 if (purple_strequal(plugin->path, filename))
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1583 return plugin;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1584 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1585
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1586 return NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1587 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1588
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1589 PurplePlugin *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1590 purple_plugins_find_with_basename(const char *basename)
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1591 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1592 #ifdef PURPLE_PLUGINS
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1593 PurplePlugin *plugin;
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1594 GList *l;
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1595 char *tmp;
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1596
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1597 g_return_val_if_fail(basename != NULL, NULL);
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1598
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1599 for (l = plugins; l != NULL; l = l->next)
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1600 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1601 plugin = (PurplePlugin *)l->data;
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1602
7278
24abce0cd98a [gaim-migrate @ 7857]
Sean Egan <seanegan@pidgin.im>
parents: 7033
diff changeset
1603 if (plugin->path != NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1604 tmp = purple_plugin_get_basename(plugin->path);
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 24569
diff changeset
1605 if (purple_strequal(tmp, basename))
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1606 {
7278
24abce0cd98a [gaim-migrate @ 7857]
Sean Egan <seanegan@pidgin.im>
parents: 7033
diff changeset
1607 g_free(tmp);
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1608 return plugin;
7278
24abce0cd98a [gaim-migrate @ 7857]
Sean Egan <seanegan@pidgin.im>
parents: 7033
diff changeset
1609 }
7279
616bdc8cf850 [gaim-migrate @ 7858]
Nathan Walp <nwalp@pidgin.im>
parents: 7278
diff changeset
1610 g_free(tmp);
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1611 }
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1612 }
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1613
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1614 #endif /* PURPLE_PLUGINS */
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1615
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1616 return NULL;
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1617 }
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1618
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1619 PurplePlugin *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1620 purple_plugins_find_with_id(const char *id)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1621 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1622 PurplePlugin *plugin;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1623 GList *l;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1624
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1625 g_return_val_if_fail(id != NULL, NULL);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1626
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
1627 for (l = plugins; l != NULL; l = l->next)
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
1628 {
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1629 plugin = l->data;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1630
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 24569
diff changeset
1631 if (purple_strequal(plugin->info->id, id))
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1632 return plugin;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1633 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1634
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1635 return NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1636 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1637
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1638 GList *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1639 purple_plugins_get_loaded(void)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1640 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1641 return loaded_plugins;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1642 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1643
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1644 GList *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1645 purple_plugins_get_protocols(void)
5573
633880e3f137 [gaim-migrate @ 5976]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
1646 {
633880e3f137 [gaim-migrate @ 5976]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
1647 return protocol_plugins;
633880e3f137 [gaim-migrate @ 5976]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
1648 }
633880e3f137 [gaim-migrate @ 5976]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
1649
633880e3f137 [gaim-migrate @ 5976]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
1650 GList *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1651 purple_plugins_get_all(void)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1652 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1653 return plugins;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1654 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1655
9015
3c27e9074fa2 [gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents: 8993
diff changeset
1656
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1657 PurplePluginAction *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1658 purple_plugin_action_new(const char* label, void (*callback)(PurplePluginAction *))
9015
3c27e9074fa2 [gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents: 8993
diff changeset
1659 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1660 PurplePluginAction *act = g_new0(PurplePluginAction, 1);
9018
b13b46fa2f16 [gaim-migrate @ 9794]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1661
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1662 act->label = g_strdup(label);
9015
3c27e9074fa2 [gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents: 8993
diff changeset
1663 act->callback = callback;
9018
b13b46fa2f16 [gaim-migrate @ 9794]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1664
b13b46fa2f16 [gaim-migrate @ 9794]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1665 return act;
9015
3c27e9074fa2 [gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents: 8993
diff changeset
1666 }
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1667
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1668 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1669 purple_plugin_action_free(PurplePluginAction *action)
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1670 {
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1671 g_return_if_fail(action != NULL);
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1672
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1673 g_free(action->label);
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1674 g_free(action);
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1675 }

mercurial