X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fmdnsd.git;a=blobdiff_plain;f=service.c;h=9d3f0841a9cfca6d3ddd053efbcef19e9214680e;hp=486a1fbcae7606c7237e60a984acee06e56c6e18;hb=d9a8000d2e08085132a5832db0480323c509ad22;hpb=37121416de13c5cfd74635a5632f95eab4c0a3d9 diff --git a/service.c b/service.c index 486a1fb..9d3f084 100644 --- a/service.c +++ b/service.c @@ -42,13 +42,13 @@ enum { }; struct service { - struct avl_node avl; + struct avl_node avl; time_t t; char *service; char *daemon; - char *txt; + const uint8_t *txt; int txt_len; int port; int active; @@ -259,18 +259,23 @@ service_load(char *path) continue; blob_for_each_attr(cur, b.head, rem) { struct service *s; - char *d_service, *d_txt, *d_daemon; + char *d_service, *d_daemon; + uint8_t *d_txt; int rem2; + int txt_len = 0; blobmsg_parse(service_policy, ARRAY_SIZE(service_policy), _tb, blobmsg_data(cur), blobmsg_data_len(cur)); if (!_tb[SERVICE_PORT] || !_tb[SERVICE_TXT]) continue; + blobmsg_for_each_attr(txt, _tb[SERVICE_TXT], rem2) + txt_len += 1 + strlen(blobmsg_get_string(txt)); + s = calloc_a(sizeof(*s), &d_daemon, strlen(gl.gl_pathv[i]) + 1, &d_service, strlen(blobmsg_name(cur)) + 1, - &d_txt, blobmsg_data_len(_tb[SERVICE_TXT])); + &d_txt, txt_len); if (!s) continue; @@ -282,18 +287,13 @@ service_load(char *path) s->avl.key = s->service; s->active = 1; s->t = 0; + s->txt_len = txt_len; + s->txt = d_txt; avl_insert(&services, &s->avl); - blobmsg_for_each_attr(txt, _tb[SERVICE_TXT], rem2) - s->txt_len += 1 + strlen(blobmsg_get_string(txt)); - if (!s->txt_len) continue; - d_txt = s->txt = malloc(s->txt_len); - if (!s->txt) - continue; - blobmsg_for_each_attr(txt, _tb[SERVICE_TXT], rem2) { int len = strlen(blobmsg_get_string(txt)); if (!len)