Mercurial > pidgin.yaz
comparison libpurple/plugins/perl/perl.c @ 23665:57419367b18d
Add error handling for visiblity to why Perl plugins fail to load.
Fixes #240
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Wed, 30 Jul 2008 04:51:58 +0000 |
parents | fb86dbeb2b15 |
children | 6f47135f5378 |
comparison
equal
deleted
inserted
replaced
23664:ece34c9599f5 | 23665:57419367b18d |
---|---|
249 probe_perl_plugin(PurplePlugin *plugin) | 249 probe_perl_plugin(PurplePlugin *plugin) |
250 { | 250 { |
251 | 251 |
252 char *args[] = {"", plugin->path }; | 252 char *args[] = {"", plugin->path }; |
253 char **argv = args; | 253 char **argv = args; |
254 int argc = 2; | 254 int argc = 2, ret; |
255 PerlInterpreter *prober; | 255 PerlInterpreter *prober; |
256 gboolean status = TRUE; | 256 gboolean status = TRUE; |
257 HV *plugin_info; | 257 HV *plugin_info; |
258 | 258 |
259 PERL_SYS_INIT(&argc, &argv); | 259 PERL_SYS_INIT(&argc, &argv); |
283 PerlIO_close(newprlIO); | 283 PerlIO_close(newprlIO); |
284 } | 284 } |
285 } | 285 } |
286 #endif | 286 #endif |
287 | 287 |
288 perl_parse(prober, xs_init, argc, argv, NULL); | 288 ret = perl_parse(prober, xs_init, argc, argv, NULL); |
289 | 289 |
290 perl_run(prober); | 290 if (ret != 0) { |
291 STRLEN len; | |
292 const char * errmsg = "Unknown error"; | |
293 if (SvTRUE(ERRSV)) | |
294 errmsg = SvPV(ERRSV, len); | |
295 purple_debug_error("perl", "Unable to parse plugin %s (%d:%s)\n", | |
296 plugin->path, ret, errmsg); | |
297 goto cleanup; | |
298 } | |
299 | |
300 ret = perl_run(prober); | |
301 | |
302 if (ret != 0) { | |
303 STRLEN len; | |
304 const char * errmsg = "Unknown error"; | |
305 if (SvTRUE(ERRSV)) | |
306 errmsg = SvPV(ERRSV, len); | |
307 purple_debug_error("perl", "Unable to run perl interpreter on plugin %s (%d:%s)\n", | |
308 plugin->path, ret, errmsg); | |
309 goto cleanup; | |
310 } | |
291 | 311 |
292 plugin_info = perl_get_hv("PLUGIN_INFO", FALSE); | 312 plugin_info = perl_get_hv("PLUGIN_INFO", FALSE); |
293 | 313 |
294 if (plugin_info == NULL) | 314 if (plugin_info == NULL) |
295 status = FALSE; | 315 status = FALSE; |
433 | 453 |
434 status = purple_plugin_register(plugin); | 454 status = purple_plugin_register(plugin); |
435 } | 455 } |
436 } | 456 } |
437 | 457 |
458 cleanup: | |
438 PL_perl_destruct_level = 1; | 459 PL_perl_destruct_level = 1; |
439 PERL_SET_CONTEXT(prober); | 460 PERL_SET_CONTEXT(prober); |
440 perl_destruct(prober); | 461 perl_destruct(prober); |
441 perl_free(prober); | 462 perl_free(prober); |
442 return status; | 463 return status; |