summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2025-01-29 20:34:26 -0800
committerKaz Kylheku <kaz@kylheku.com>2025-01-29 20:34:26 -0800
commit9137eeb72199692aebaa65ba60da9dc82686b4e2 (patch)
tree56db90fc431f46238669845970b0cbccf054b48c
parent6eb174cb138dc9c4bdd92d27a5b30ff03881db63 (diff)
downloadtxr-9137eeb72199692aebaa65ba60da9dc82686b4e2.tar.gz
txr-9137eeb72199692aebaa65ba60da9dc82686b4e2.tar.bz2
txr-9137eeb72199692aebaa65ba60da9dc82686b4e2.zip
mkstring: minimum 7 char alloc size.
* lib.c (mkstring): Do not allocate less than 8 characters, including null terminator, to the string. This speeds up code which builds up strings from empty, one character at a time.
-rw-r--r--lib.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/lib.c b/lib.c
index ff9ec00b..4f5cb11d 100644
--- a/lib.c
+++ b/lib.c
@@ -5285,13 +5285,14 @@ val mkstring(val len, val ch_in)
(uw_throwf(range_error_s, lit("~a: negative size ~s specified"),
self, len, nao), 0),
c_num(len, self));
- wchar_t *str = chk_wmalloc(l + 1);
+ size_t a = max(7, l);
+ wchar_t *str = chk_wmalloc(a + 1);
val s = string_own(str);
val ch = default_arg_strict(ch_in, chr(' '));
wmemset(str, c_chr(ch), l);
str[l] = 0;
s->st.len = len;
- s->st.alloc = c_num(len, self) + 1;
+ s->st.alloc = a;
return s;
}