Add support for plugin pattern via command line
authorMarcel Holtmann <marcel@holtmann.org>
Mon, 5 Jan 2009 21:05:58 +0000 (22:05 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 5 Jan 2009 21:05:58 +0000 (22:05 +0100)
src/connman.h
src/main.c
src/plugin.c

index b4276a4..0afef06 100644 (file)
@@ -62,7 +62,7 @@ gboolean __connman_debug_enabled(void);
 
 #include <connman/plugin.h>
 
-int __connman_plugin_init(void);
+int __connman_plugin_init(const char *pattern);
 void __connman_plugin_cleanup(void);
 
 #include <connman/security.h>
index 971359d..b895b1c 100644 (file)
@@ -51,6 +51,7 @@ static void disconnect_callback(DBusConnection *conn, void *user_data)
 }
 
 static gchar *option_device = NULL;
+static gchar *option_plugin = NULL;
 static gboolean option_detach = TRUE;
 static gboolean option_selftest = FALSE;
 static gboolean option_compat = FALSE;
@@ -59,6 +60,8 @@ static gboolean option_debug = FALSE;
 static GOptionEntry options[] = {
        { "device", 'i', 0, G_OPTION_ARG_STRING, &option_device,
                                "Specify network device/interface", "DEV" },
+       { "plugin", 'p', 0, G_OPTION_ARG_STRING, &option_plugin,
+                               "Specify plugins to load", "NAME" },
        { "nodaemon", 'n', G_OPTION_FLAG_REVERSE,
                                G_OPTION_ARG_NONE, &option_detach,
                                "Don't fork daemon to background" },
@@ -163,11 +166,12 @@ int main(int argc, char *argv[])
        __connman_rtnl_init();
        __connman_udev_init();
 
-       __connman_plugin_init();
+       __connman_plugin_init(option_plugin);
 
        __connman_element_start();
 
        g_free(option_device);
+       g_free(option_plugin);
 
        memset(&sa, 0, sizeof(sa));
        sa.sa_handler = sig_term;
index 2ebe327..716eb7c 100644 (file)
@@ -60,7 +60,7 @@ static gboolean add_plugin(void *handle, struct connman_plugin_desc *desc)
        return TRUE;
 }
 
-int __connman_plugin_init(void)
+int __connman_plugin_init(const char *pattern)
 {
        GDir *dir;
        const gchar *file;
@@ -97,6 +97,13 @@ int __connman_plugin_init(void)
                                continue;
                        }
 
+                       if (g_pattern_match_simple(pattern,
+                                                       desc->name) == FALSE) {
+                               DBG("ignoring %s", desc->description);
+                               dlclose(handle);
+                               continue;
+                       }
+
                        if (add_plugin(handle, desc) == FALSE)
                                dlclose(handle);
                }