From: Rusty Russell Date: Tue, 19 Apr 2011 10:53:59 +0000 (+0930) Subject: str_talloc: make strjoin much more efficient. X-Git-Url: https://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=ed7aec77da970556c0281e2c7573bf00d1390ff1 str_talloc: make strjoin much more efficient. Inspired by patch from Volker. --- diff --git a/ccan/str_talloc/str_talloc.c b/ccan/str_talloc/str_talloc.c index 3bcb1f2a..88e02ef2 100644 --- a/ccan/str_talloc/str_talloc.c +++ b/ccan/str_talloc/str_talloc.c @@ -38,11 +38,17 @@ char *strjoin(const void *ctx, char *strings[], const char *delim) { unsigned int i; char *ret = talloc_strdup(ctx, ""); + size_t totlen = 0, dlen = strlen(delim); for (i = 0; strings[i]; i++) { - ret = talloc_append_string(ret, strings[i]); - ret = talloc_append_string(ret, delim); + size_t len = strlen(strings[i]); + ret = talloc_realloc(ctx, ret, char, totlen + len + dlen + 1); + memcpy(ret + totlen, strings[i], len); + totlen += len; + memcpy(ret + totlen, delim, dlen); + totlen += dlen; } + ret[totlen] = '\0'; return ret; }