X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=cache.c;h=9c2f062590dbb4fa0a103b0d5be13aa931e76085;hb=be25ce4fe37ddc9c42df9558e2a13dae146dee79;hp=b244dae14ef75fc103dc99e12c33fe897d799366;hpb=85ac2adb78d343c0bf75e055380afa557816546e;p=project%2Fmdnsd.git 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;