aboutsummaryrefslogtreecommitdiff
path: root/String.c
diff options
context:
space:
mode:
Diffstat (limited to 'String.c')
-rw-r--r--String.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/String.c b/String.c
index c0d454d..dd34d34 100644
--- a/String.c
+++ b/String.c
@@ -95,9 +95,11 @@ S_append(String s, const char* str) {
if (!B_resizeable(sm->b, s))
return R_OutOfBounds;
- RETURN_NOTOK(B_resize(sm->b, sizeof(*sm) + (sm->length += strlen(str)) + 1));
+ usize strlength = strlen(str);
+ RETURN_NOTOK(B_resize(sm->b, sizeof(*sm) + (sm->length + strlength) + 1));
strcat(s, str);
+ sm->length += strlength;
return R_Ok;
}
@@ -109,18 +111,19 @@ S_prepend(String s, const char* str) {
struct StringMeta* sm = S_metadata(s);
- usize strlength = strlen(str);
if (!B_resizeable(sm->b, s))
return R_OutOfBounds;
- usize orig_len = sm->length;
- RETURN_NOTOK(B_resize(sm->b, sizeof(*sm) + (sm->length += strlength) + 1));
+ usize strlength = strlen(str);
+ RETURN_NOTOK(B_resize(sm->b, sizeof(*sm) + (sm->length + strlength) + 1));
- for (usize i = orig_len; i > 0; --i)
+ for (usize i = sm->length; i > 0; --i)
s[i - 1 + strlength] = s[i - 1];
for (usize i = 0; i < strlength; ++i)
s[i] = str[i];
+ sm->length += strlength;
+
return R_Ok;
}