aboutsummaryrefslogtreecommitdiffstats
path: root/Str.c
diff options
context:
space:
mode:
authorTatsuya Kinoshita <tats@debian.org>2021-03-03 22:03:18 +0000
committerTatsuya Kinoshita <tats@debian.org>2021-03-03 22:03:18 +0000
commit91731ec385b800431677f6a9da4815e24cbaaa37 (patch)
treefb9552b3f12a2621fd54b80e6c5f283a2f89ed34 /Str.c
parentUpdate ChangeLog (diff)
downloadw3m-91731ec385b800431677f6a9da4815e24cbaaa37.tar.gz
w3m-91731ec385b800431677f6a9da4815e24cbaaa37.zip
Prevent unneeded memory allocation in Strgrow
Diffstat (limited to 'Str.c')
-rw-r--r--Str.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/Str.c b/Str.c
index 0786ec1..ab8e4bd 100644
--- a/Str.c
+++ b/Str.c
@@ -288,13 +288,15 @@ Strgrow(Str x)
if (x->length + 1 >= newlen)
x->length = newlen - 2;
}
- x->ptr = GC_MALLOC_ATOMIC(newlen);
- if (x->ptr == NULL)
- exit(1);
- x->area_size = newlen;
- bcopy((void *)old, (void *)x->ptr, x->length);
+ if (x->area_size < newlen) {
+ x->ptr = GC_MALLOC_ATOMIC(newlen);
+ if (x->ptr == NULL)
+ exit(1);
+ x->area_size = newlen;
+ bcopy((void *)old, (void *)x->ptr, x->length);
+ GC_free(old);
+ }
x->ptr[x->length] = '\0';
- GC_free(old);
}
Str