+
+ AvahiStringList *n;
+
+ assert(self);
+ assert(key);
+ assert(len || !val);
+
+ AVAHI_WARN_LINKAGE;
+
+ if (!(n = avahi_string_list_add_pair_arbitrary(self->strlst, key, val, len)))
+ return SW_E_UNKNOWN;
+
+ self->strlst = n;
+ self->buffer_valid = 0;
+ return SW_OKAY;
+}
+
+static int rebuild(sw_text_record self) {
+ assert(self);
+
+ if (self->buffer_valid)
+ return 0;
+
+ self->buffer_size = avahi_string_list_serialize(self->strlst, NULL, 0);
+
+ if (!(self->buffer = avahi_realloc(self->buffer, self->buffer_size + 1)))
+ return -1;
+
+ avahi_string_list_serialize(self->strlst, self->buffer, self->buffer_size);
+ self->buffer_valid = 1;
+
+ return 0;