X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-common%2Fstrlst.c;h=8a05e02699de31244410e1d640122b130846cc15;hb=9642bac4b85de24ce62c53ad6a8e2ab4b2dd31ba;hp=0853414d9e1f591e21e3ce5b36a8f89fee43e03c;hpb=9962a048634c590db23a00db1d01daada779844c;p=catta diff --git a/avahi-common/strlst.c b/avahi-common/strlst.c index 0853414..8a05e02 100644 --- a/avahi-common/strlst.c +++ b/avahi-common/strlst.c @@ -25,35 +25,52 @@ #include #include +#include #include "strlst.h" +#include "malloc.h" -AvahiStringList *avahi_string_list_add_arbitrary(AvahiStringList *l, const guint8*text, guint size) { +AvahiStringList*avahi_string_list_add_anonymous(AvahiStringList *l, size_t size) { AvahiStringList *n; - g_assert(text); - - n = g_malloc(sizeof(AvahiStringList) + size); + if (!(n = avahi_malloc(sizeof(AvahiStringList) + size))) + return NULL; + n->next = l; - memcpy(n->text, text, n->size = size); + n->size = size; return n; } -AvahiStringList *avahi_string_list_add(AvahiStringList *l, const gchar *text) { - g_assert(text); +AvahiStringList *avahi_string_list_add_arbitrary(AvahiStringList *l, const uint8_t*text, size_t size) { + AvahiStringList *n; + + assert(text); - return avahi_string_list_add_arbitrary(l, (const guint8*) text, strlen(text)); + if (!(n = avahi_string_list_add_anonymous(l, size))) + return NULL; + + if (size > 0) + memcpy(n->text, text, size); + + return n; } -AvahiStringList *avahi_string_list_parse(gconstpointer data, guint size) { +AvahiStringList *avahi_string_list_add(AvahiStringList *l, const char *text) { + assert(text); + + return avahi_string_list_add_arbitrary(l, (const uint8_t*) text, strlen(text)); +} + +AvahiStringList *avahi_string_list_parse(const void* data, size_t size) { AvahiStringList *r = NULL; - const guint8 *c; - g_assert(data); + const uint8_t *c; + + assert(data); c = data; for (;;) { - guint k; + size_t k; if (size < 1) break; @@ -73,12 +90,12 @@ void avahi_string_list_free(AvahiStringList *l) { while (l) { n = l->next; - g_free(l); + avahi_free(l); l = n; } } -static AvahiStringList* string_list_reverse(AvahiStringList *l) { +AvahiStringList* avahi_string_list_reverse(AvahiStringList *l) { AvahiStringList *r = NULL, *n; while (l) { @@ -91,12 +108,12 @@ static AvahiStringList* string_list_reverse(AvahiStringList *l) { return r; } -gchar* avahi_string_list_to_string(AvahiStringList *l) { +char* avahi_string_list_to_string(AvahiStringList *l) { AvahiStringList *n; - guint s = 0; - gchar *t, *e; + size_t s = 0; + char *t, *e; - l = string_list_reverse(l); + l = avahi_string_list_reverse(l); for (n = l; n; n = n->next) { if (n != l) @@ -105,42 +122,45 @@ gchar* avahi_string_list_to_string(AvahiStringList *l) { s += n->size+2; } - t = e = g_new(gchar, s+1); + if (!(t = e = avahi_new(char, s+1))) { + l = avahi_string_list_reverse(l); + return NULL; + } for (n = l; n; n = n->next) { if (n != l) *(e++) = ' '; *(e++) = '"'; - strncpy(e, (gchar*) n->text, n->size); + strncpy(e, (char*) n->text, n->size); e[n->size] = 0; e = strchr(e, 0); *(e++) = '"'; - g_assert(e); + assert(e); } - l = string_list_reverse(l); + l = avahi_string_list_reverse(l); *e = 0; return t; } -guint avahi_string_list_serialize(AvahiStringList *l, gpointer data, guint size) { - guint used = 0; +size_t avahi_string_list_serialize(AvahiStringList *l, void *data, size_t size) { + size_t used = 0; if (data) { - guint8 *c; + uint8_t *c; AvahiStringList *n; - g_assert(data); + assert(data); - l = string_list_reverse(l); + l = avahi_string_list_reverse(l); c = data; for (n = l; n; n = n->next) { - guint k; + size_t k; if (size < 1) break; @@ -158,12 +178,12 @@ guint avahi_string_list_serialize(AvahiStringList *l, gpointer data, guint size) used += 1+ k; } - l = string_list_reverse(l); + l = avahi_string_list_reverse(l); } else { AvahiStringList *n; for (n = l; n; n = n->next) { - guint k; + size_t k; k = n->size; if (k > 255) @@ -176,20 +196,20 @@ guint avahi_string_list_serialize(AvahiStringList *l, gpointer data, guint size) return used; } -gboolean avahi_string_list_equal(const AvahiStringList *a, const AvahiStringList *b) { +int avahi_string_list_equal(const AvahiStringList *a, const AvahiStringList *b) { for (;;) { if (!a && !b) - return TRUE; + return 1; if (!a || !b) - return FALSE; + return 0; if (a->size != b->size) - return FALSE; + return 0; if (a->size != 0 && memcmp(a->text, b->text, a->size) != 0) - return FALSE; + return 0; a = a->next; b = b->next; @@ -207,16 +227,15 @@ AvahiStringList *avahi_string_list_add_many(AvahiStringList *r, ...) { } AvahiStringList *avahi_string_list_add_many_va(AvahiStringList *r, va_list va) { - const gchar *txt; + const char *txt; - while ((txt = va_arg(va, const gchar*))) + while ((txt = va_arg(va, const char*))) r = avahi_string_list_add(r, txt); return r; } - -AvahiStringList *avahi_string_list_new(const gchar *txt, ...) { +AvahiStringList *avahi_string_list_new(const char *txt, ...) { va_list va; AvahiStringList *r = NULL; @@ -241,5 +260,26 @@ AvahiStringList *avahi_string_list_copy(const AvahiStringList *l) { for (; l; l = l->next) r = avahi_string_list_add_arbitrary(r, l->text, l->size); - return string_list_reverse(r); + return avahi_string_list_reverse(r); +} + +AvahiStringList *avahi_string_list_new_from_array(const char *array[], int length) { + AvahiStringList *r = NULL; + int i; + + assert(array); + + for (i = 0; length >= 0 ? i < length : !!array[i]; i++) + r = avahi_string_list_add(r, array[i]); + + return r; +} + +unsigned avahi_string_list_length(const AvahiStringList *l) { + unsigned n = 0; + + for (; l; l = l->next) + n++; + + return n; }