comparison src/plugins.c @ 787:53d2e3e02297

[gaim-migrate @ 797] plugging plugin leaks. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Tue, 29 Aug 2000 18:24:26 +0000
parents 4c292b3f74ea
children 00c56b54e92c
comparison
equal deleted inserted replaced
786:ffb824f6cd24 787:53d2e3e02297
164 if (filename[0] != '/') { 164 if (filename[0] != '/') {
165 char *buf = g_malloc(BUF_LEN); 165 char *buf = g_malloc(BUF_LEN);
166 g_snprintf(buf, BUF_LEN - 1, "%s/%s", getenv("HOME"), PLUGIN_DIR); 166 g_snprintf(buf, BUF_LEN - 1, "%s/%s", getenv("HOME"), PLUGIN_DIR);
167 plug->filename = g_malloc(strlen(buf) + strlen(filename) + 1); 167 plug->filename = g_malloc(strlen(buf) + strlen(filename) + 1);
168 sprintf(plug->filename, "%s%s", buf, filename); 168 sprintf(plug->filename, "%s%s", buf, filename);
169 g_free(buf);
169 } else 170 } else
170 plug->filename = g_strdup(filename); 171 plug->filename = g_strdup(filename);
171 sprintf(debug_buff, "Loading %s\n", filename); 172 sprintf(debug_buff, "Loading %s\n", filename);
172 debug_print(debug_buff); 173 debug_print(debug_buff);
173 /* do NOT `OR' with RTLD_GLOBAL, otherwise plugins may conflict 174 /* do NOT `OR' with RTLD_GLOBAL, otherwise plugins may conflict
175 * programming, by not using RTLD_GLOBAL :P ) */ 176 * programming, by not using RTLD_GLOBAL :P ) */
176 plug->handle = dlopen(plug->filename, RTLD_LAZY); 177 plug->handle = dlopen(plug->filename, RTLD_LAZY);
177 if (!plug->handle) { 178 if (!plug->handle) {
178 error = (char *)dlerror(); 179 error = (char *)dlerror();
179 do_error_dialog(error, _("Plugin Error")); 180 do_error_dialog(error, _("Plugin Error"));
181 g_free(plug->filename);
180 g_free(plug); 182 g_free(plug);
181 return; 183 return;
182 } 184 }
183 185
184 gaim_plugin_init = dlsym(plug->handle, "gaim_plugin_init"); 186 gaim_plugin_init = dlsym(plug->handle, "gaim_plugin_init");
185 if ((error = (char *)dlerror()) != NULL) { 187 if ((error = (char *)dlerror()) != NULL) {
186 do_error_dialog(error, _("Plugin Error")); 188 do_error_dialog(error, _("Plugin Error"));
187 dlclose(plug->handle); 189 dlclose(plug->handle);
190 g_free(plug->filename);
188 g_free(plug); 191 g_free(plug);
189 return; 192 return;
190 } 193 }
191 194
192 retval = (*gaim_plugin_init)(plug->handle); 195 retval = (*gaim_plugin_init)(plug->handle);
215 plugin_error = (*gaim_plugin_error)(retval); 218 plugin_error = (*gaim_plugin_error)(retval);
216 if (plugin_error) 219 if (plugin_error)
217 do_error_dialog(plugin_error, _("Plugin Error")); 220 do_error_dialog(plugin_error, _("Plugin Error"));
218 } 221 }
219 dlclose(plug->handle); 222 dlclose(plug->handle);
223 g_free(plug->filename);
220 g_free(plug); 224 g_free(plug);
221 return; 225 return;
222 } 226 }
223 227
224 plugins = g_list_append(plugins, plug); 228 plugins = g_list_append(plugins, plug);