From 212dd12150b68575e0823286e6d1da5539fab5e4 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Thu, 8 Oct 2026 14:14:39 +0200 Subject: [PATCH] lib: optimize trim(), ltrim(), rtrim() Avoid string copy if nothing was actually trimmed and return a new reference to the original input string instead. Signed-off-by: Jo-Philipp Wich --- lib.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib.c b/lib.c index acecac98..f0f2c4d1 100644 --- a/lib.c +++ b/lib.c @@ -2424,8 +2424,8 @@ uc_trim_common(uc_vm_t *vm, size_t nargs, bool start, bool end) { uc_value_t *str = uc_fn_arg(0); uc_value_t *chr = uc_fn_arg(1); - const char *p, *c; - size_t len; + const char *o, *p, *c; + size_t olen, len; if (ucv_type(str) != UC_STRING || (chr != NULL && ucv_type(chr) != UC_STRING)) @@ -2434,8 +2434,8 @@ uc_trim_common(uc_vm_t *vm, size_t nargs, bool start, bool end) c = ucv_string_get(chr); c = c ? c : " \t\r\n"; - p = ucv_string_get(str); - len = ucv_string_length(str); + o = p = ucv_string_get(str); + olen = len = ucv_string_length(str); if (start) { while (*p) { @@ -2456,6 +2456,9 @@ uc_trim_common(uc_vm_t *vm, size_t nargs, bool start, bool end) } } + if (o == p && olen == len) + return ucv_get(str); + return ucv_string_new_length(p, len); }