Hi! As suggested by Colin [1]: this patch will put frontend plugins symbol in the "cdebconf_" namespaces. [1] http://lists.debian.org/debian-boot/2007/08/msg00006.html The old symbols are still looked up as a fallback to ensure compatibility. Fix a memory leak in plugin_new() along the way. --- packages/cdebconf/debian/changelog | 3 +++ packages/cdebconf/doc/plugins.txt | 6 +++--- packages/cdebconf/src/plugin.c | 15 ++++++++++++--- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/cdebconf/debian/changelog b/packages/cdebconf/debian/changelog index 2344d31..2231249 100644 --- a/packages/cdebconf/debian/changelog +++ b/packages/cdebconf/debian/changelog @@ -21,6 +21,9 @@ cdebconf (0.120) UNRELEASED; urgency=low * Load frontend with RTLD_NOW | RTLD_GLOBAL to allow plugins to access frontend API without requiring calls to dlsym(). Kudos to Steve Langasek for the help to figure this out! + * Put frontend plugins symbol in the "cdebconf_" namespaces. The old + symbols are still looked up as a fallback to ensure compatibility. + * Fix a memory leak in plugin_new() along the way. -- Joey Hess <joeyh@debian.org> Fri, 17 Aug 2007 13:54:30 -0400 diff --git a/packages/cdebconf/doc/plugins.txt b/packages/cdebconf/doc/plugins.txt index d491cee..1b4ea63 100644 --- a/packages/cdebconf/doc/plugins.txt +++ b/packages/cdebconf/doc/plugins.txt @@ -26,7 +26,7 @@ would be stored in: The library must provide a function with the following name: - <frontend>_handler_<type> + cdebconf_<frontend>_handler_<type> Any hyphens in <type> here are substituted with underscores, so: @@ -35,11 +35,11 @@ Any hyphens in <type> here are substituted with underscores, so: The required prototype for this function depends on the frontend. For newt and text, it is (again with hyphens in <type> substituted with underscores): - int <frontend>_handler_<type>(struct frontend *obj, struct question *q) + int cdebconf_<frontend>_handler_<type>(struct frontend *obj, struct question *q) For gtk, it is: - int <frontend>_handler_<type>(struct frontend *obj, struct question *q, GtkWidget *questionbox); + int cdebconf_<frontend>_handler_<type>(struct frontend *obj, struct question *q, GtkWidget *questionbox); The handler should return DC_OK (defined in common.h) if all went well, DC_GOBACK if the user wants to back up to the previous question, or DC_NOTOK diff --git a/packages/cdebconf/src/plugin.c b/packages/cdebconf/src/plugin.c index f09b0c8..ad28b47 100644 --- a/packages/cdebconf/src/plugin.c +++ b/packages/cdebconf/src/plugin.c @@ -59,11 +59,20 @@ struct plugin *plugin_new(const char *frontend, const char *filename) return NULL; } - symbollen = strlen(frontend) + 9 + strlen(plugin->name) + 1; + symbollen = strlen(frontend) + 18 + strlen(plugin->name) + 1; symbol = malloc(symbollen); - snprintf(symbol, symbollen, "%s_handler_%s", frontend, typesymbol); - + snprintf(symbol, symbollen, "cdebconf_%s_handler_%s", frontend, + typesymbol); plugin->handler = dlsym(plugin->module, symbol); + free(symbol); + if (plugin->handler == NULL) { + /* Let's try with the old style symbol name. */ + symbollen = strlen(frontend) + 9 + strlen(plugin->name) + 1; + symbol = malloc(symbollen); + snprintf(symbol, symbollen, "%s_handler_%s", frontend, typesymbol); + plugin->handler = dlsym(plugin->module, symbol); + free(symbol); + } if (plugin->handler == NULL) { INFO(INFO_WARN, "Malformed plugin module %s", filename); plugin_delete(plugin); -- Jérémy Bobbio .''`. lunar@debian.org : :Ⓐ : # apt-get install anarchism `. `'` `-
Attachment:
signature.asc
Description: Digital signature