From: Felix Fietkau Date: Tue, 3 Jun 2014 21:30:31 +0000 (+0200) Subject: cache: convert types to kvlist X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fmdnsd.git;a=commitdiff_plain;h=be25ce4fe37ddc9c42df9558e2a13dae146dee79;ds=sidebyside cache: convert types to kvlist Signed-off-by: Felix Fietkau --- diff --git a/cache.c b/cache.c index b244dae..9c2f062 100644 --- a/cache.c +++ b/cache.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #include "cache.h" @@ -40,9 +41,11 @@ #include "dns.h" static struct uloop_timeout cache_gc; -struct avl_tree records, entries, types, hosts; +struct avl_tree records, entries, hosts; static struct blob_buf b; +static struct kvlist types; + static void cache_record_free(struct cache_record *r, int rem) { @@ -103,41 +106,28 @@ static void cache_load_services(void) { struct blob_attr *cur; - int rem; + int rem; - blob_buf_init(&b, 0); + blob_buf_init(&b, 0); if (!blobmsg_add_json_from_file(&b, "/lib/mdns/service-types")) return; - blob_for_each_attr(cur, b.head, rem) { - struct cache_type *t = malloc(sizeof(struct cache_type)); - - if (!t) - continue; - t->avl.key = t->key = strdup(blobmsg_name(cur)); - t->val = strdup(blobmsg_get_string(cur)); - avl_insert(&types, &t->avl); - } + blob_for_each_attr(cur, b.head, rem) + kvlist_set(&types, blobmsg_name(cur), blobmsg_get_string(cur)); } char* cache_lookup_name(const char *key) { - struct cache_type *t; - - t = avl_find_element(&types, key, t, avl); - if (!t) - return NULL; - - return t->val; + return kvlist_get(&types, key); } int cache_init(void) { + kvlist_init(&types, kvlist_strlen); avl_init(&entries, avl_strcmp, true, NULL); - avl_init(&types, avl_strcmp, false, NULL); avl_init(&records, avl_strcmp, true, NULL); cache_gc.cb = cache_gc_timer; diff --git a/cache.h b/cache.h index 03c35f6..2e921a1 100644 --- a/cache.h +++ b/cache.h @@ -48,7 +48,7 @@ struct cache_record { time_t time; }; -extern struct avl_tree records, entries, types; +extern struct avl_tree records, entries; extern int cache_init(void); extern void cache_scan(void);