[PATCH v2 047/113] commands: time: reduce strjoin runtime, drop trailing space
Ahmad Fatoum
a.fatoum at pengutronix.de
Mon Mar 4 10:59:32 PST 2024
time concatenates its arguments to pass it to run_command in a
suboptimal manner: The destination string is traversed from the
beginning on every iteration due to strcat and we have a left-over
separator at the end, while it's only needed in-between.
In preparation for factoring the code out as a library strjoin function,
fix these shortcomings.
Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
---
v1 -> v2:
- swapped order with follow-up commit (Sascha)
---
commands/time.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/commands/time.c b/commands/time.c
index 72647a3bb876..0a38db61845d 100644
--- a/commands/time.c
+++ b/commands/time.c
@@ -10,7 +10,7 @@
static int do_time(int argc, char *argv[])
{
int i, opt;
- unsigned char *buf;
+ unsigned char *buf, *p;
u64 start, end, diff64;
bool nanoseconds = false;
int len = 1; /* '\0' */
@@ -34,13 +34,15 @@ static int do_time(int argc, char *argv[])
for (i = 0; i < argc; i++)
len += strlen(argv[i]) + 1;
- buf = xzalloc(len);
+ p = buf = xmalloc(len);
- for (i = 0; i < argc; i++) {
- strcat(buf, argv[i]);
- strcat(buf, " ");
+ for (i = 0; i < argc - 1; i++) {
+ p = stpcpy(p, argv[i]);
+ p = mempcpy(p, " ", strlen(" "));
}
+ stpcpy(p, argv[i]);
+
start = get_time_ns();
run_command(buf);
--
2.39.2
More information about the barebox
mailing list