Mercurial > pidgin
view plugins/error.c @ 4029:31480901bf29
[gaim-migrate @ 4233]
"with the change to .60 and the new method of using perl_call
argument parsing was broken. What essentially happened is that the
previous method of pre-parsing was to generate a string in the for
'arg one','arg two','arg three' and execute the perl function via
&perlfunc(args). This would make the perl function in essense parse
the variables for us. With the introduction of perl_call, however, that
argument list was being treated as one long, singular argument.
perl_call asks for lists of pointers to character arrays that are NULL
terminated, and it passes them into the function using an internal
method.
With this said, I changed the function execute_perl from requiring
(char* function, char* args) to (char* function, char** args). It no
longer takes a single argument and inserts it into the appropriate data
type that is terminated with a NULL element, instead you now have
to pass it a pre-NULL terminated array of character pointers to
accomodate some functions wanting to give it more than one
argument. I modified the functions that use execute_perl to use this
method, and commented those lines, as well chopping the multiple
argument section into buf[0] = looking sections for clarity. Finally, I
inserted a heft comment above execute_perl to try and explain what I
did, I hope it is understandable. "
-- Eric Timme (var1ety)
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Sun, 01 Dec 2002 20:43:00 +0000 |
parents | cd938f18f3f8 |
children |
line wrap: on
line source
#define GAIM_PLUGINS #include "gaim.h" #include <stdlib.h> #include <time.h> char *gaim_plugin_error(int); char *gaim_plugin_init(GModule *handle) { int error; /* so here, we load any callbacks, do the normal stuff */ srand(time(NULL)); error = rand() % 3; error -= 2; /* there's a 1 in 3 chance there *won't* be an error :) */ return gaim_plugin_error(error); } void gaim_plugin_remove() { /* this only gets called if we get loaded successfully, and then * unloaded. */ } char *gaim_plugin_error(int error) { /* by the time we've gotten here, all our callbacks are removed. * we just have to deal with what the error was (as defined by us) * and do any other clean-up stuff we need to do. */ switch (error) { case -1: return "MY BAD"; case -2: return "Internal plugin error: exiting."; default: return NULL; } } struct gaim_plugin_description desc; struct gaim_plugin_description *gaim_plugin_desc() { desc.api_version = PLUGIN_API_VERSION; desc.name = g_strdup("Error Tester"); desc.version = g_strdup(VERSION); desc.description = g_strdup("A plugin that causes error messages."); desc.authors = g_strdup("Eric Warmehoven <eric@warmenhoven.org>"); desc.url = g_strdup(WEBSITE); return &desc; } char *name() { return "Error Tester " VERSION ; } char *description() { return "A nice little program that causes error messages"; }