From 7d42a95d1206db12ccd2ce7ab2f1e3d483e66ba1 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 17 Apr 2026 18:50:49 +1000 Subject: [PATCH] util: replace strcat memcpy in strv_join Repeatedly using strcat means we rescan the string, making it O(n^2). Use memcpy and an offset instead because we can't affort to waste nanoseconds here. Assisted-by: Claude:claude-opus-4-6 Part-of: --- src/util-strings.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/util-strings.c b/src/util-strings.c index 41c1d95..6e6140a 100644 --- a/src/util-strings.c +++ b/src/util-strings.c @@ -150,11 +150,17 @@ strv_join(char **strv, const char *joiner) slen += (count - 1) * strlen(joiner); str = xalloc(slen + 1); /* trailing \0 */ + size_t jlen = strlen(joiner); + size_t offset = 0; for (s = strv; *s; s++) { - strcat(str, *s); + size_t l = strlen(*s); + memcpy(str + offset, *s, l); + offset += l; --count; - if (count > 0) - strcat(str, joiner); + if (count > 0) { + memcpy(str + offset, joiner, jlen); + offset += jlen; + } } return str;