]> git.meshlink.io Git - catta/commitdiff
* add two new functions:
authorLennart Poettering <lennart@poettering.net>
Sun, 21 Aug 2005 16:04:22 +0000 (16:04 +0000)
committerLennart Poettering <lennart@poettering.net>
Sun, 21 Aug 2005 16:04:22 +0000 (16:04 +0000)
* avahi_string_list_add_printf
* avahi_string_list_add_vprintf

git-svn-id: file:///home/lennart/svn/public/avahi/trunk@383 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe

avahi-common/malloc.c
avahi-common/strlst-test.c
avahi-common/strlst.c
avahi-common/strlst.h

index 9b0e22e12b70ae7aa88065a75c2a2ef59232efae..2c03d8fa86306c004a3b77dc75c89b652ab689b5 100644 (file)
@@ -192,7 +192,7 @@ void avahi_set_allocator(const AvahiAllocator *a) {
 }
 
 char *avahi_strdup_vprintf(const char *fmt, va_list ap) {
-    size_t len = 100;
+    size_t len = 80;
     char *buf;
     
     assert(fmt);
index 12aa62304b7e32e541866fcd3dd7a0f1428ecf74..84d565aa79f13cb0fd0dd634048d4d025fe9ee40 100644 (file)
@@ -43,6 +43,7 @@ int main(int argc, char *argv[]) {
     a = avahi_string_list_add(a, "quux");
     a = avahi_string_list_add_arbitrary(a, (const uint8_t*) "null\0null", 9);
     a = avahi_string_list_add(a, "end");
+    a = avahi_string_list_add_printf(a, "seven=%i %c", 7, 'x');
 
     t = avahi_string_list_to_string(a);
     printf("--%s--\n", t);
index 8a05e02699de31244410e1d640122b130846cc15..574b151c4b4da0d67e3f8cb91e1bbce5ccb582a1 100644 (file)
@@ -26,6 +26,7 @@
 #include <string.h>
 #include <stdarg.h>
 #include <assert.h>
+#include <stdio.h>
 
 #include "strlst.h"
 #include "malloc.h"
@@ -38,7 +39,10 @@ AvahiStringList*avahi_string_list_add_anonymous(AvahiStringList *l, size_t size)
     
     n->next = l;
     n->size = size;
-    
+
+    /* NUL terminate strings, just to make sure */
+    n->text[size] = 0;
+
     return n;
 }
 
@@ -52,7 +56,7 @@ AvahiStringList *avahi_string_list_add_arbitrary(AvahiStringList *l, const uint8
 
     if (size > 0)
         memcpy(n->text, text, size);
-    
+
     return n;
 }
 
@@ -283,3 +287,53 @@ unsigned avahi_string_list_length(const AvahiStringList *l) {
 
     return n;
 }
+
+AvahiStringList *avahi_string_list_add_vprintf(AvahiStringList *l, const char *format, va_list va) {
+    size_t len = 80;
+    AvahiStringList *r;
+    
+    assert(format);
+
+    if (!(r = avahi_malloc(sizeof(AvahiStringList) + len)))
+        return NULL;
+
+    for (;;) {
+        int n;
+        AvahiStringList *nr;
+        
+        n = vsnprintf((char*) r->text, len+1, format, va);
+
+        if (n >= 0 && n < (int) len)
+            break;
+
+        if (n >= 0)
+            len = n+1;
+        else
+            len *= 2;
+
+        if (!(nr = avahi_realloc(r, sizeof(AvahiStringList) + len))) {
+            avahi_free(r);
+            return NULL;
+        }
+
+        r = nr;
+    }
+
+    
+    r->next = l;
+    r->size = strlen((char*) r->text); 
+
+    return r;
+}
+
+AvahiStringList *avahi_string_list_add_printf(AvahiStringList *l, const char *format, ...) {
+    va_list va;
+    
+    assert(format);
+
+    va_start(va, format);
+    l  = avahi_string_list_add_vprintf(l, format, va);
+    va_end(va);
+
+    return l;    
+}
index 10b7aa69ca32a3a74abd07fb71bc2866d3130942..b4e387705a8f813922de27e9e61c02c45385cbb9 100644 (file)
@@ -66,6 +66,12 @@ void avahi_string_list_free(AvahiStringList *l);
  * start. */
 AvahiStringList *avahi_string_list_add(AvahiStringList *l, const char *text);
 
+/** Append a new NUL terminated formatted string to the specified string list */
+AvahiStringList *avahi_string_list_add_printf(AvahiStringList *l, const char *format, ...) AVAHI_GCC_PRINTF_ATTR23;
+
+/** Append a new NUL terminated formatted string to the specified string list */
+AvahiStringList *avahi_string_list_add_vprintf(AvahiStringList *l, const char *format, va_list va);
+
 /** Append an arbitrary length byte string to the list. Returns the
  * new list start. */
 AvahiStringList *avahi_string_list_add_arbitrary(AvahiStringList *l, const uint8_t *text, size_t size);