X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fplugin.c;h=65e0311aff4a8802fbb3af06834cd221cc98b229;hb=86cd761a6e375875ec904ea378ed61d4fc41e1b8;hp=6268652d1e172fd2c900aab154927cb81af16382;hpb=d37c84fb73cd705e0aceb06a701b764c9be0ebed;p=framework%2Fconnectivity%2Fconnman.git diff --git a/src/plugin.c b/src/plugin.c index 6268652..65e0311 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -2,7 +2,7 @@ * * Connection Manager * - * Copyright (C) 2007-2009 Intel Corporation. All rights reserved. + * Copyright (C) 2007-2012 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -68,7 +68,8 @@ static gboolean add_plugin(void *handle, struct connman_plugin_desc *desc) return FALSE; if (g_str_equal(desc->version, CONNMAN_VERSION) == FALSE) { - connman_error("Version mismatch for %s", desc->description); + connman_error("Invalid version %s for %s", desc->version, + desc->description); return FALSE; } @@ -80,24 +81,34 @@ static gboolean add_plugin(void *handle, struct connman_plugin_desc *desc) plugin->active = FALSE; plugin->desc = desc; + __connman_log_enable(desc->debug_start, desc->debug_stop); + plugins = g_slist_insert_sorted(plugins, plugin, compare_priority); return TRUE; } static gboolean check_plugin(struct connman_plugin_desc *desc, - const char *pattern, const char *exclude) + char **patterns, char **excludes) { - if (exclude != NULL && - g_pattern_match_simple(exclude, desc->name) == TRUE) { - connman_info("Excluding %s", desc->description); - return FALSE; + if (excludes) { + for (; *excludes; excludes++) + if (g_pattern_match_simple(*excludes, desc->name)) + break; + if (*excludes) { + connman_info("Excluding %s", desc->description); + return FALSE; + } } - if (pattern != NULL && - g_pattern_match_simple(pattern, desc->name) == FALSE) { - connman_info("Ignoring %s", desc->description); - return FALSE; + if (patterns) { + for (; *patterns; patterns++) + if (g_pattern_match_simple(*patterns, desc->name)) + break; + if (!*patterns) { + connman_info("Ignoring %s", desc->description); + return FALSE; + } } return TRUE; @@ -107,6 +118,8 @@ static gboolean check_plugin(struct connman_plugin_desc *desc, int __connman_plugin_init(const char *pattern, const char *exclude) { + gchar **patterns = NULL; + gchar **excludes = NULL; GSList *list; GDir *dir; const gchar *file; @@ -115,9 +128,15 @@ int __connman_plugin_init(const char *pattern, const char *exclude) DBG(""); + if (pattern) + patterns = g_strsplit_set(pattern, ":, ", -1); + + if (exclude) + excludes = g_strsplit_set(exclude, ":, ", -1); + for (i = 0; __connman_builtin[i]; i++) { if (check_plugin(__connman_builtin[i], - pattern, exclude) == FALSE) + patterns, excludes) == FALSE) continue; add_plugin(NULL, __connman_builtin[i]); @@ -153,7 +172,7 @@ int __connman_plugin_init(const char *pattern, const char *exclude) continue; } - if (check_plugin(desc, pattern, exclude) == FALSE) { + if (check_plugin(desc, patterns, excludes) == FALSE) { dlclose(handle); continue; } @@ -174,6 +193,9 @@ int __connman_plugin_init(const char *pattern, const char *exclude) plugin->active = TRUE; } + g_strfreev(patterns); + g_strfreev(excludes); + return 0; }