string: strlist_append_ref() to avoid strdup(), constify _foreach
authorMarko Kreen <markokr@gmail.com>
Fri, 23 Oct 2009 09:13:17 +0000 (12:13 +0300)
committerMarko Kreen <markokr@gmail.com>
Tue, 8 Dec 2009 12:03:18 +0000 (14:03 +0200)
usual/string.c
usual/string.h

index 50816b711b3d31879d4981731abcacbb05575844..f39f5e5b507466b6454c735462ea8308ad632d4a 100644 (file)
@@ -43,16 +43,27 @@ bool strlist_empty(struct StrList *slist)
 }
 
 bool strlist_append(struct StrList *slist, const char *str)
+{
+       const char *nstr = NULL;
+       bool ok;
+       if (str) {
+               nstr = strdup(str);
+               if (!nstr)
+                       return false;
+       }
+       ok = strlist_append_ref(slist, nstr);
+       if (!ok)
+               free(nstr);
+       return ok;
+}
+
+bool strlist_append_ref(struct StrList *slist, const char *str)
 {
        struct StrItem *item = calloc(1, sizeof(*item));
        if (!item)
                return false;
        list_init(&item->node);
-       item->str = strdup(str);
-       if (!item->str) {
-               free(item);
-               return false;
-       }
+       item->str = str;
        statlist_append(&slist->list, &item->node);
        return true;
 }
@@ -96,7 +107,7 @@ void strlist_free(struct StrList *slist)
        free(slist);
 }
 
-bool strlist_foreach(struct StrList *slist, str_cb func, void *arg)
+bool strlist_foreach(const struct StrList *slist, str_cb func, void *arg)
 {
        struct List *el;
        struct StrItem *item;
index 6488523d6902112c4c3a03efd25141866ed148da..81156ab419eb9356d536e91ae70f60f8953f983a 100644 (file)
@@ -40,7 +40,8 @@ struct StrList *strlist_new(void);
 void strlist_free(struct StrList *slist);
 bool strlist_empty(struct StrList *slist);
 bool strlist_append(struct StrList *slist, const char *str);
-bool strlist_foreach(struct StrList *slist, str_cb cb_func, void *cb_arg);
+bool strlist_append_ref(struct StrList *slist, const char *str);
+bool strlist_foreach(const struct StrList *slist, str_cb cb_func, void *cb_arg);
 const char *strlist_pop(struct StrList *slist);
 
 bool parse_word_list(const char *s, str_cb cb_func, void *cb_arg);