Add priority field to plugin description
authorMarcel Holtmann <marcel@holtmann.org>
Fri, 27 Feb 2009 07:37:46 +0000 (08:37 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Fri, 27 Feb 2009 07:37:46 +0000 (08:37 +0100)
include/plugin.h
src/plugin.c

index 84e0958..350937e 100644 (file)
@@ -33,6 +33,10 @@ extern "C" {
 understanding that ConnMan hasn't reached a stable API."
 #endif
 
+#define CONNMAN_PLUGIN_PRIORITY_LOW      -100
+#define CONNMAN_PLUGIN_PRIORITY_DEFAULT     0
+#define CONNMAN_PLUGIN_PRIORITY_HIGH      100
+
 /**
  * SECTION:plugin
  * @title: Plugin premitives
@@ -43,6 +47,7 @@ struct connman_plugin_desc {
        const char *name;
        const char *description;
        const char *version;
+       int priority;
        int (*init) (void);
        void (*exit) (void);
 };
@@ -75,7 +80,8 @@ struct connman_plugin_desc {
  */
 #define CONNMAN_PLUGIN_DEFINE(name, description, version, init, exit) \
                struct connman_plugin_desc connman_plugin_desc = { \
-                       #name, description, version, init, exit \
+                       #name, description, version, \
+                       CONNMAN_PLUGIN_PRIORITY_DEFAULT, init, exit \
                };
 
 #ifdef __cplusplus
index 59d3572..216fce1 100644 (file)
@@ -36,6 +36,14 @@ struct connman_plugin {
        struct connman_plugin_desc *desc;
 };
 
+static gint compare_priority(gconstpointer a, gconstpointer b)
+{
+       const struct connman_plugin *plugin1 = a;
+       const struct connman_plugin *plugin2 = b;
+
+       return plugin2->desc->priority - plugin1->desc->priority;
+}
+
 static gboolean add_plugin(void *handle, struct connman_plugin_desc *desc)
 {
        struct connman_plugin *plugin;
@@ -60,7 +68,7 @@ static gboolean add_plugin(void *handle, struct connman_plugin_desc *desc)
                return FALSE;
        }
 
-       plugins = g_slist_append(plugins, plugin);
+       plugins = g_slist_insert_sorted(plugins, plugin, compare_priority);
 
        return TRUE;
 }