X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fmdnsd.git;a=blobdiff_plain;f=cache.c;h=adfc8159599048fae46cf12101b92242b42f2833;hp=89bd015bb80d1748299453ac1a5e6d904906acb7;hb=4059fe10c18e7ea7309198741f18cf71c6afc911;hpb=cef25024bc6d3948d1e4a164d82a63fa21414912 diff --git a/cache.c b/cache.c index 89bd015..adfc815 100644 --- a/cache.c +++ b/cache.c @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include @@ -226,8 +225,7 @@ cache_answer(struct interface *iface, uint8_t *base, int blen, char *name, struc char *name_buf; void *rdata_ptr, *txt_ptr; int host_len = 0; - - static char rdata_buffer[MAX_DATA_LEN + 1]; + static char *rdata_buffer = (char *) mdns_buf; if (!(a->class & CLASS_IN)) return; @@ -341,15 +339,12 @@ cache_answer(struct interface *iface, uint8_t *base, int blen, char *name, struc void cache_dump_records(struct blob_buf *buf, const char *name) { - struct cache_record *r, *q = avl_find_element(&records, name, r, avl); + struct cache_record *r, *last, *next; const char *txt; char buffer[INET6_ADDRSTRLEN]; - if (!q) - return; - - do { - r = q; + last = avl_last_element(&records, last, avl); + for (r = avl_find_element(&records, name, r, avl); r; r = next) { switch (r->type) { case TYPE_TXT: if (r->txt && strlen(r->txt)) { @@ -376,6 +371,12 @@ cache_dump_records(struct blob_buf *buf, const char *name) blobmsg_add_string(buf, "ipv6", buffer); break; } - q = avl_next_element(r, avl); - } while (q && !strcmp(r->record, q->record)); + + if (r == last) + break; + + next = avl_next_element(r, avl); + if (strcmp(r->record, next->record) != 0) + break; + } }