X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-common%2Fstrlst.c;h=04941b4e9d116fe2d88afcfeb0047c8530cbe433;hb=6b391bb81f0dce0193a722254016b26c12a17643;hp=db5ac594ea06a66242beaff0d74b755b7589ff61;hpb=7bf79a1a47143d0b2d1eb87fe1b938f870edc5b2;p=catta diff --git a/avahi-common/strlst.c b/avahi-common/strlst.c index db5ac59..04941b4 100644 --- a/avahi-common/strlst.c +++ b/avahi-common/strlst.c @@ -27,9 +27,11 @@ #include #include #include +#include #include "strlst.h" #include "malloc.h" +#include "defs.h" AvahiStringList*avahi_string_list_add_anonymous(AvahiStringList *l, size_t size) { AvahiStringList *n; @@ -200,14 +202,19 @@ size_t avahi_string_list_serialize(AvahiStringList *l, void *data, size_t size) } else { AvahiStringList *n; - for (n = l; n; n = n->next) { - size_t k; - - k = n->size; - if (k > 255) - k = 255; - - used += 1+k; + if (!l) + used = 1; + else { + + for (n = l; n; n = n->next) { + size_t k; + + k = n->size; + if (k > 255) + k = 255; + + used += 1+k; + } } } @@ -397,17 +404,16 @@ AvahiStringList *avahi_string_list_add_pair_arbitrary(AvahiStringList *l, const return l; } - int avahi_string_list_get_pair(AvahiStringList *l, char **key, char **value, size_t *size) { char *e; assert(l); - assert(key); if (!(e = memchr(l->text, '=', l->size))) { - - if (!(*key = avahi_strdup((char*) l->text))) - return -1; + + if (key) + if (!(*key = avahi_strdup((char*) l->text))) + return -1; if (value) *value = NULL; @@ -418,8 +424,9 @@ int avahi_string_list_get_pair(AvahiStringList *l, char **key, char **value, siz } else { size_t n; - if (!(*key = avahi_strndup((char*) l->text, e - (char *) l->text))) - return -1; + if (key) + if (!(*key = avahi_strndup((char*) l->text, e - (char *) l->text))) + return -1; e++; /* Advance after '=' */ @@ -428,7 +435,8 @@ int avahi_string_list_get_pair(AvahiStringList *l, char **key, char **value, siz if (value) { if (!(*value = avahi_memdup(e, n+1))) { - avahi_free(*key); + if (key) + avahi_free(*key); return -1; } @@ -441,3 +449,41 @@ int avahi_string_list_get_pair(AvahiStringList *l, char **key, char **value, siz return 0; } + +AvahiStringList *avahi_string_list_get_next(AvahiStringList *l) { + assert(l); + return l->next; +} + +uint8_t *avahi_string_list_get_text(AvahiStringList *l) { + assert(l); + return l->text; +} + +size_t avahi_string_list_get_size(AvahiStringList *l) { + assert(l); + return l->size; +} + +uint32_t avahi_string_list_get_service_cookie(AvahiStringList *l) { + AvahiStringList *f; + char *value = NULL, *end = NULL; + uint32_t ret; + + if (!(f = avahi_string_list_find(l, AVAHI_SERVICE_COOKIE))) + return AVAHI_SERVICE_COOKIE_INVALID; + + if (avahi_string_list_get_pair(f, NULL, &value, NULL) < 0 || !value) + return AVAHI_SERVICE_COOKIE_INVALID; + + ret = (uint32_t) strtoll(value, &end, 0); + + if (*value && end && *end != 0) { + avahi_free(value); + return AVAHI_SERVICE_COOKIE_INVALID; + } + + avahi_free(value); + + return ret; +}