X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fplugin.c;h=9af616f7e5062a14b2a6eafd5f0c1b694a92be84;hb=8cbe9b1d129c7651b185788197ac423758b86590;hp=1b5736545a502c59cc539a309931e9ce996bc7a2;hpb=c2d1b081ccdd3720ef645bf8dbf82ea4abc752fb;p=connman diff --git a/src/plugin.c b/src/plugin.c index 1b57365..9af616f 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -27,6 +27,10 @@ #include +#ifdef CONNMAN_PLUGIN_BUILTIN +#undef CONNMAN_PLUGIN_BUILTIN +#endif + #include "connman.h" static GSList *plugins = NULL; @@ -70,15 +74,44 @@ static gboolean add_plugin(void *handle, struct connman_plugin_desc *desc) return TRUE; } +#include "builtin.h" + +static gboolean check_plugin(struct connman_plugin_desc *desc, + const char *pattern, const char *exclude) +{ + if (exclude != NULL && + g_pattern_match_simple(exclude, desc->name) == TRUE) { + DBG("excluding %s", desc->description); + return FALSE; + } + + if (pattern != NULL && + g_pattern_match_simple(pattern, desc->name) == FALSE) { + DBG("ignoring %s", desc->description); + return FALSE; + } + + return TRUE; +} + int __connman_plugin_init(const char *pattern, const char *exclude) { GSList *list; GDir *dir; const gchar *file; gchar *filename; + unsigned int i; DBG(""); + for (i = 0; __connman_builtin[i]; i++) { + if (check_plugin(__connman_builtin[i], + pattern, exclude) == FALSE) + continue; + + add_plugin(NULL, __connman_builtin[i]); + } + dir = g_dir_open(PLUGINDIR, 0, NULL); if (dir != NULL) { while ((file = g_dir_read_name(dir)) != NULL) { @@ -108,16 +141,7 @@ int __connman_plugin_init(const char *pattern, const char *exclude) continue; } - if (exclude != NULL && g_pattern_match_simple(exclude, - desc->name) == TRUE) { - DBG("excluding %s", desc->description); - dlclose(handle); - continue; - } - - if (pattern != NULL && g_pattern_match_simple(pattern, - desc->name) == FALSE) { - DBG("ignoring %s", desc->description); + if (check_plugin(desc, pattern, exclude) == FALSE) { dlclose(handle); continue; } @@ -153,7 +177,8 @@ void __connman_plugin_cleanup(void) if (plugin->active == TRUE && plugin->desc->exit) plugin->desc->exit(); - dlclose(plugin->handle); + if (plugin->handle != NULL) + dlclose(plugin->handle); g_free(plugin); }