From 7aa82b382a9742ad1f6dc1b91e0f340554b82a23 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Tue, 3 Nov 2009 11:11:19 -0300 Subject: [PATCH] obexd: Add support for builtin plugins. --- obexd/plugins/filesystem.c | 2 +- obexd/plugins/ftp.c | 2 +- obexd/plugins/opp.c | 2 +- obexd/src/plugin.c | 11 ++++++++++- obexd/src/plugin.h | 7 +++++++ 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/obexd/plugins/filesystem.c b/obexd/plugins/filesystem.c index 4a06c989d..080b7717f 100644 --- a/obexd/plugins/filesystem.c +++ b/obexd/plugins/filesystem.c @@ -392,4 +392,4 @@ static void filesystem_exit(void) obex_mime_type_driver_unregister(&file); } -OBEX_PLUGIN_DEFINE("filesystem", filesystem_init, filesystem_exit) +OBEX_PLUGIN_DEFINE(filesystem, filesystem_init, filesystem_exit) diff --git a/obexd/plugins/ftp.c b/obexd/plugins/ftp.c index 82f16f223..0736095b6 100644 --- a/obexd/plugins/ftp.c +++ b/obexd/plugins/ftp.c @@ -473,4 +473,4 @@ static void ftp_exit(void) obex_service_driver_unregister(&pcsuite); } -OBEX_PLUGIN_DEFINE("ftp", ftp_init, ftp_exit) +OBEX_PLUGIN_DEFINE(ftp, ftp_init, ftp_exit) diff --git a/obexd/plugins/opp.c b/obexd/plugins/opp.c index 7d5a73551..64de753f7 100644 --- a/obexd/plugins/opp.c +++ b/obexd/plugins/opp.c @@ -219,4 +219,4 @@ static void opp_exit(void) obex_service_driver_unregister(&driver); } -OBEX_PLUGIN_DEFINE("opp", opp_init, opp_exit) +OBEX_PLUGIN_DEFINE(opp, opp_init, opp_exit) diff --git a/obexd/src/plugin.c b/obexd/src/plugin.c index b4c4a11cc..7131ada3c 100644 --- a/obexd/src/plugin.c +++ b/obexd/src/plugin.c @@ -79,14 +79,22 @@ static gboolean add_plugin(void *handle, struct obex_plugin_desc *desc) return TRUE; } +#include "builtin.h" + gboolean plugin_init(void) { GDir *dir; const gchar *file; + unsigned int i; if (strlen(PLUGINDIR) == 0) return FALSE; + debug("Loading builtin plugins"); + + for (i = 0; __obex_builtin[i]; i++) + add_plugin(NULL, __obex_builtin[i]); + debug("Loading plugins %s", PLUGINDIR); dir = g_dir_open(PLUGINDIR, 0, NULL); @@ -142,7 +150,8 @@ void plugin_cleanup(void) if (plugin->desc->exit) plugin->desc->exit(); - dlclose(plugin->handle); + if (plugin->handle != NULL) + dlclose(plugin->handle); g_free(plugin); } diff --git a/obexd/src/plugin.h b/obexd/src/plugin.h index 086fa59f0..0439cd15d 100644 --- a/obexd/src/plugin.h +++ b/obexd/src/plugin.h @@ -27,9 +27,16 @@ struct obex_plugin_desc { void (*exit) (void); }; +#ifdef OBEX_PLUGIN_BUILTIN +#define OBEX_PLUGIN_DEFINE(name, init, exit) \ + struct obex_plugin_desc __obex_builtin_ ## name = { \ + #name, init, exit \ + }; +#else #define OBEX_PLUGIN_DEFINE(name,init,exit) \ extern struct obex_plugin_desc obex_plugin_desc \ __attribute__ ((visibility("default"))); \ struct obex_plugin_desc obex_plugin_desc = { \ name, init, exit \ }; +#endif -- 2.47.3