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: <https://gitlab.freedesktop.org/libinput/libei/-/merge_requests/388>
This commit is contained in:
Peter Hutterer 2026-04-17 18:50:49 +10:00 committed by Marge Bot
parent 80e2b4e4d9
commit 7d42a95d12

View file

@ -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;