From: Ahmad Fatoum <a.fatoum@pengutronix.de> To: barebox@lists.infradead.org Cc: Ahmad Fatoum <a.fatoum@pengutronix.de> Subject: [PATCH 3/6] string: reduce strjoin runtime, drop trailing separator Date: Wed, 26 Oct 2022 08:42:02 +0200 [thread overview] Message-ID: <20221026064205.2360041-3-a.fatoum@pengutronix.de> (raw) In-Reply-To: <20221026064205.2360041-1-a.fatoum@pengutronix.de> The implementation of strjoin is a bit suboptimal. The destination string is traversed from the beginning due to strcat and we have a left-over separator at the end, while it should only be in-between. Fix this. Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- include/string.h | 1 + lib/string.c | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/include/string.h b/include/string.h index 2cc727fd1d7a..596440ca8164 100644 --- a/include/string.h +++ b/include/string.h @@ -4,6 +4,7 @@ #include <linux/string.h> +void *mempcpy(void *dest, const void *src, size_t count); int strtobool(const char *str, int *val); char *strsep_unescaped(char **, const char *); char *stpcpy(char *dest, const char *src); diff --git a/lib/string.c b/lib/string.c index a500e8a3d1ba..edd36da4d4f2 100644 --- a/lib/string.c +++ b/lib/string.c @@ -603,6 +603,11 @@ void *__memcpy(void * dest, const void *src, size_t count) __alias(__default_memcpy); #endif +void *mempcpy(void *dest, const void *src, size_t count) +{ + return memcpy(dest, src, count) + count; +} +EXPORT_SYMBOL(mempcpy); #ifndef __HAVE_ARCH_MEMMOVE /** @@ -943,7 +948,7 @@ char *strjoin(const char *separator, char **arr, size_t arrlen) { size_t separatorlen; int len = 1; /* '\0' */ - char *buf; + char *buf, *p; int i; separatorlen = strlen(separator); @@ -951,12 +956,14 @@ char *strjoin(const char *separator, char **arr, size_t arrlen) for (i = 0; i < arrlen; i++) len += strlen(arr[i]) + separatorlen; - buf = xzalloc(len); + p = buf = xmalloc(len); for (i = 0; i < arrlen; i++) { - strcat(buf, arr[i]); - strcat(buf, separator); + p = stpcpy(p, arr[i]); + p = mempcpy(p, separator, separatorlen); } + p[-separatorlen] = '\0'; + return buf; } -- 2.30.2
next prev parent reply other threads:[~2022-10-26 6:43 UTC|newest] Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-10-26 6:42 [PATCH 1/6] commands: add new uptime command Ahmad Fatoum 2022-10-26 6:42 ` [PATCH 2/6] commands: time: refactor into new strjoin Ahmad Fatoum 2022-10-26 6:42 ` Ahmad Fatoum [this message] 2022-10-27 6:56 ` [PATCH 3/6] string: reduce strjoin runtime, drop trailing separator Sascha Hauer 2022-10-27 7:24 ` Ahmad Fatoum 2022-10-27 7:33 ` Sascha Hauer 2022-10-27 7:53 ` Ahmad Fatoum 2022-10-26 6:42 ` [PATCH 4/6] test: self: add strjoin tests Ahmad Fatoum 2022-10-26 6:42 ` [PATCH 5/6] commands: drvinfo: support filtering by driver Ahmad Fatoum 2022-10-27 7:29 ` Sascha Hauer 2022-10-27 7:51 ` Ahmad Fatoum 2022-10-27 8:49 ` Sascha Hauer 2022-10-26 6:42 ` [PATCH 6/6] test: self: only include ramfs selftest when CONFIG_SELFTEST_FS_RAMFS=y Ahmad Fatoum 2022-10-27 7:11 ` [PATCH 1/6] commands: add new uptime command Sascha Hauer
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20221026064205.2360041-3-a.fatoum@pengutronix.de \ --to=a.fatoum@pengutronix.de \ --cc=barebox@lists.infradead.org \ --subject='Re: [PATCH 3/6] string: reduce strjoin runtime, drop trailing separator' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox