comparison src/plugin.c @ 12699:2b53185e5d8f

[gaim-migrate @ 15042] I think this is the correct handling of the error mode on Win32. committer: Tailor Script <tailor@pidgin.im>
author Richard Laager <rlaager@wiktel.com>
date Tue, 03 Jan 2006 18:12:54 +0000
parents 18e619ed4eaf
children df49362e0378
comparison
equal deleted inserted replaced
12698:e5f79b206d7e 12699:2b53185e5d8f
236 } 236 }
237 } 237 }
238 238
239 plugin = gaim_plugin_new(has_file_extension(filename, G_MODULE_SUFFIX), filename); 239 plugin = gaim_plugin_new(has_file_extension(filename, G_MODULE_SUFFIX), filename);
240 240
241 if (plugin->native_plugin) {
242 const char *error;
241 #ifdef _WIN32 243 #ifdef _WIN32
242 /* Suppress error popups for failing to load plugins */ 244 /* Suppress error popups for failing to load plugins */
243 UINT old_error_mode = SetErrorMode(SEM_FAILCRITICALERRORS); 245 UINT old_error_mode = SetErrorMode(SEM_FAILCRITICALERRORS);
244 #endif 246 #endif
245 247
246 if (plugin->native_plugin) {
247 const char *error;
248 /* 248 /*
249 * We pass G_MODULE_BIND_LOCAL here to prevent symbols from 249 * We pass G_MODULE_BIND_LOCAL here to prevent symbols from
250 * plugins being added to the global name space. 250 * plugins being added to the global name space.
251 * 251 *
252 * G_MODULE_BIND_LOCAL was added in glib 2.3.3. 252 * G_MODULE_BIND_LOCAL was added in glib 2.3.3.
289 plugin->handle = g_module_open(filename, G_MODULE_BIND_LAZY); 289 plugin->handle = g_module_open(filename, G_MODULE_BIND_LAZY);
290 #endif 290 #endif
291 291
292 if (plugin->handle == NULL) 292 if (plugin->handle == NULL)
293 { 293 {
294 #ifdef _WIN32
295 /* Restore the original error mode */
296 SetErrorMode(old_error_mode);
297 #endif
294 gaim_plugin_destroy(plugin); 298 gaim_plugin_destroy(plugin);
295 return NULL; 299 return NULL;
296 } 300 }
297 else 301 else
298 { 302 {
317 if (error != NULL) 321 if (error != NULL)
318 gaim_debug_error("plugins", "Error closing module %s: %s\n", 322 gaim_debug_error("plugins", "Error closing module %s: %s\n",
319 plugin->path, error); 323 plugin->path, error);
320 plugin->handle = NULL; 324 plugin->handle = NULL;
321 325
326 #ifdef _WIN32
327 /* Restore the original error mode */
328 SetErrorMode(old_error_mode);
329 #endif
322 gaim_plugin_destroy(plugin); 330 gaim_plugin_destroy(plugin);
323 return NULL; 331 return NULL;
324 } 332 }
325 gaim_init_plugin = unpunned; 333 gaim_init_plugin = unpunned;
326 }
327 else {
328 loader = find_loader_for_plugin(plugin);
329
330 if (loader == NULL) {
331 gaim_plugin_destroy(plugin);
332 return NULL;
333 }
334
335 gaim_init_plugin = GAIM_PLUGIN_LOADER_INFO(loader)->probe;
336 }
337 334
338 #ifdef _WIN32 335 #ifdef _WIN32
339 /* Restore the original error mode */ 336 /* Restore the original error mode */
340 SetErrorMode(old_error_mode); 337 SetErrorMode(old_error_mode);
341 #endif 338 #endif
339 }
340 else {
341 loader = find_loader_for_plugin(plugin);
342
343 if (loader == NULL) {
344 gaim_plugin_destroy(plugin);
345 return NULL;
346 }
347
348 gaim_init_plugin = GAIM_PLUGIN_LOADER_INFO(loader)->probe;
349 }
342 350
343 if (!gaim_init_plugin(plugin) || plugin->info == NULL) 351 if (!gaim_init_plugin(plugin) || plugin->info == NULL)
344 { 352 {
345 gaim_plugin_destroy(plugin); 353 gaim_plugin_destroy(plugin);
346 return NULL; 354 return NULL;