summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2008-12-13 16:01:18 +0100
committerMarcel Holtmann <marcel@holtmann.org>2008-12-13 16:01:18 +0100
commit2f09e0d729845dd47373c9c7e70b8aad566ebf14 (patch)
tree754c038c4a516d4aaf799265582ad00c55c6aa8a
parent16d4c499a52e8e8116015be66c86e15bb82f96be (diff)
downloadconnman-2f09e0d729845dd47373c9c7e70b8aad566ebf14.tar.gz
connman-2f09e0d729845dd47373c9c7e70b8aad566ebf14.tar.bz2
connman-2f09e0d729845dd47373c9c7e70b8aad566ebf14.zip
Add support for sorting resolvers by priority
-rw-r--r--include/resolver.h5
-rw-r--r--src/resolver.c11
2 files changed, 15 insertions, 1 deletions
diff --git a/include/resolver.h b/include/resolver.h
index 77a95cf0..5c023758 100644
--- a/include/resolver.h
+++ b/include/resolver.h
@@ -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);
diff --git a/src/resolver.c b/src/resolver.c
index 929fd2e5..a8132361 100644
--- a/src/resolver.c
+++ b/src/resolver.c
@@ -27,6 +27,14 @@
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;
}