summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'string.c')
-rw-r--r--string.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/string.c b/string.c
index 5cdf7a3620..fce8a05183 100644
--- a/string.c
+++ b/string.c
@@ -126,6 +126,9 @@ VALUE rb_cSymbol;
FL_SET((str), ELTS_SHARED); \
} while (0)
+#define STR_HEAP_PTR(str) (RSTRING(str)->as.heap.ptr)
+#define STR_HEAP_SIZE(str) (RSTRING(str)->as.heap.aux.capa)
+
#define is_ascii_string(str) (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT)
#define is_broken_string(str) (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN)
@@ -880,7 +883,7 @@ rb_str_free(VALUE str)
st_delete(frozen_strings, &fstr, NULL);
}
if (!STR_EMBED_P(str) && !STR_SHARED_P(str)) {
- xfree(RSTRING(str)->as.heap.ptr);
+ ruby_xsizedfree(STR_HEAP_PTR(str), STR_HEAP_SIZE(str));
}
}
@@ -1463,7 +1466,7 @@ str_discard(VALUE str)
{
str_modifiable(str);
if (!STR_SHARED_P(str) && !STR_EMBED_P(str)) {
- xfree(RSTRING_PTR(str));
+ ruby_xsizedfree(STR_HEAP_PTR(str), STR_HEAP_SIZE(str));
RSTRING(str)->as.heap.ptr = 0;
RSTRING(str)->as.heap.len = 0;
}
@@ -1980,13 +1983,14 @@ rb_str_resize(VALUE str, long len)
STR_SET_NOEMBED(str);
}
else if (len + termlen <= RSTRING_EMBED_LEN_MAX + 1) {
- char *ptr = RSTRING(str)->as.heap.ptr;
+ char *ptr = STR_HEAP_PTR(str);
+ size_t size = STR_HEAP_SIZE(str);
STR_SET_EMBED(str);
if (slen > len) slen = len;
if (slen > 0) MEMCPY(RSTRING(str)->as.ary, ptr, char, slen);
TERM_FILL(RSTRING(str)->as.ary + len, termlen);
STR_SET_EMBED_LEN(str, len);
- if (independent) xfree(ptr);
+ if (independent) ruby_xsizedfree(ptr, size);
return str;
}
else if (!independent) {
@@ -5497,7 +5501,7 @@ tr_trans(VALUE str, VALUE src, VALUE repl, int sflag)
t += tlen;
}
if (!STR_EMBED_P(str)) {
- xfree(RSTRING(str)->as.heap.ptr);
+ ruby_xsizedfree(STR_HEAP_PTR(str), STR_HEAP_SIZE(str));
}
*t = '\0';
RSTRING(str)->as.heap.ptr = buf;
@@ -5573,7 +5577,7 @@ tr_trans(VALUE str, VALUE src, VALUE repl, int sflag)
t += tlen;
}
if (!STR_EMBED_P(str)) {
- xfree(RSTRING(str)->as.heap.ptr);
+ ruby_xsizedfree(STR_HEAP_PTR(str), STR_HEAP_SIZE(str));
}
*t = '\0';
RSTRING(str)->as.heap.ptr = buf;