Add support for sorting resolvers by priority
authorMarcel Holtmann <marcel@holtmann.org>
Sat, 13 Dec 2008 15:01:18 +0000 (16:01 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Sat, 13 Dec 2008 15:01:18 +0000 (16:01 +0100)
include/resolver.h
src/resolver.c

index 77a95cf..5c02375 100644 (file)
@@ -32,8 +32,13 @@ extern "C" {
  * @short_description: Functions for registering resolver modules
  */
 
+#define CONNMAN_RESOLVER_PRIORITY_LOW      -100
+#define CONNMAN_RESOLVER_PRIORITY_DEFAULT     0
+#define CONNMAN_RESOLVER_PRIORITY_HIGH      100
+
 struct connman_resolver {
        const char *name;
+       int priority;
 };
 
 extern int connman_resolver_register(struct connman_resolver *resolver);
index 929fd2e..a813236 100644 (file)
 
 static GSList *resolver_list = NULL;
 
+static gint compare_priority(gconstpointer a, gconstpointer b)
+{
+       const struct connman_resolver *resolver1 = a;
+       const struct connman_resolver *resolver2 = b;
+
+       return resolver2->priority - resolver1->priority;
+}
+
 /**
  * connman_resolver_register:
  * @resolver: resolver module
@@ -39,7 +47,8 @@ int connman_resolver_register(struct connman_resolver *resolver)
 {
        DBG("resolver %p name %s", resolver, resolver->name);
 
-       resolver_list = g_slist_append(resolver_list, resolver);
+       resolver_list = g_slist_insert_sorted(resolver_list, resolver,
+                                                       compare_priority);
 
        return 0;
 }