diff options
-rw-r--r-- | include/resolver.h | 5 | ||||
-rw-r--r-- | src/resolver.c | 11 |
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; } |