MINOR: add list_append_word function

int list_append_word(struct list *li, const char *str, char **err)

Append a copy of string <str> (inside a wordlist) at the end of
the list <li>.
The caller is responsible for freeing the <err> and <str> copy memory
area using free().

On failure : return 0 and <err> filled with an error message.
This commit is contained in:
Maxime de Roucy 2016-05-13 23:52:54 +02:00 committed by Willy Tarreau
parent 7d1b48fae0
commit dc88785f9c
2 changed files with 40 additions and 0 deletions

View File

@ -1089,4 +1089,12 @@ static inline unsigned long long rdtsc()
}
#endif
/* append a copy of string <str> (in a wordlist) at the end of the list <li>
* On failure : return 0 and <err> filled with an error message.
* The caller is responsible for freeing the <err> and <str> copy
* memory area using free()
*/
struct list;
int list_append_word(struct list *li, const char *str, char **err);
#endif /* _COMMON_STANDARD_H */

View File

@ -3439,6 +3439,38 @@ unsigned char utf8_next(const char *s, int len, unsigned int *c)
return code | ((p-(unsigned char *)s)&0x0f);
}
/* append a copy of string <str> (in a wordlist) at the end of the list <li>
* On failure : return 0 and <err> filled with an error message.
* The caller is responsible for freeing the <err> and <str> copy
* memory area using free()
*/
int list_append_word(struct list *li, const char *str, char **err)
{
struct wordlist *wl;
wl = calloc(1, sizeof(*wl));
if (!wl) {
memprintf(err, "out of memory");
goto fail_wl;
}
wl->s = strdup(str);
if (!wl->s) {
memprintf(err, "out of memory");
goto fail_wl_s;
}
LIST_ADDQ(li, &wl->list);
return 1;
fail_wl_s:
free(wl->s);
fail_wl:
free(wl);
return 0;
}
/*
* Local variables:
* c-indent-level: 8