cache: make record/hostname lookup case-insensitive
[project/mdnsd.git] / service.c
index 97b6f911121c2cd2b22334a4705e66f5a23d723c..bd9f985c57873e6946d4b4da8bac0f628c802d5a 100644 (file)
--- a/service.c
+++ b/service.c
@@ -17,6 +17,7 @@
 
 #include <resolv.h>
 #include <glob.h>
+#include <inttypes.h>
 #include <stdio.h>
 #include <time.h>
 
@@ -122,7 +123,7 @@ service_timeout(struct service *s)
        time_t t = monotonic_time();
 
        if (t - s->t <= TOUT_LOOKUP) {
-               DBG(2, "t=%lu, s->t=%lu, t - s->t = %lu\n", t, s->t, t - s->t);
+               DBG(2, "t=%" PRId64 ", s->t=%" PRId64 ", t - s->t = %" PRId64 "\n", (int64_t)t, (int64_t)s->t, (int64_t)(t - s->t));
                return 0;
        }
 
@@ -218,6 +219,7 @@ service_load_blob(struct blob_attr *b)
        uint8_t *d_txt;
        int rem2;
        int txt_len = 0;
+       unsigned int n;
 
        blobmsg_parse(service_policy, ARRAY_SIZE(service_policy),
                _tb, blobmsg_data(b), blobmsg_data_len(b));
@@ -228,8 +230,9 @@ service_load_blob(struct blob_attr *b)
                blobmsg_for_each_attr(txt, _tb[SERVICE_TXT], rem2)
                        txt_len += 1 + strlen(blobmsg_get_string(txt));
 
+       n = strlen(blobmsg_name(b));
        s = calloc_a(sizeof(*s),
-               &d_id, strlen(blobmsg_name(b)) + 1,
+               &d_id, n + 1,
                &d_instance, _tb[SERVICE_INSTANCE] ? strlen(blobmsg_get_string(_tb[SERVICE_INSTANCE])) + 1 : 0,
                &d_service, strlen(blobmsg_get_string(_tb[SERVICE_SERVICE])) + 1,
                &d_txt, txt_len);
@@ -237,7 +240,7 @@ service_load_blob(struct blob_attr *b)
                return;
 
        s->port = blobmsg_get_u32(_tb[SERVICE_PORT]);
-       s->id = strcpy(d_id, blobmsg_name(b));
+       s->id = strncpy(d_id, blobmsg_name(b), n);
        if (_tb[SERVICE_INSTANCE])
                s->instance = strcpy(d_instance, blobmsg_get_string(_tb[SERVICE_INSTANCE]));
        else