summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-01-26 03:43:20 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-01-26 03:43:20 +0000
commit44bf6684fdce66451d7e1e764dc7a6058d419c98 (patch)
tree7e2148dc282c62ceb1b869d0b3f76ca2cbb1f370
parentc0d0dd91e5fefe9de44b37ea6dee796b906a4b1b (diff)
string.c: term fill
* string.c (str_buf_cat): fill wchar terminator. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49408 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--string.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/string.c b/string.c
index 7e11130738..b3204fce2d 100644
--- a/string.c
+++ b/string.c
@@ -98,6 +98,9 @@ VALUE rb_cSymbol;
#define RESIZE_CAPA(str,capacity) do {\
const int termlen = TERM_LEN(str);\
+ RESIZE_CAPA_TERM(str,capacity,termlen);\
+} while (0)
+#define RESIZE_CAPA_TERM(str,capacity,termlen) do {\
if (STR_EMBED_P(str)) {\
if ((capacity) > RSTRING_EMBED_LEN_MAX) {\
char *const tmp = ALLOC_N(char, (capacity)+termlen);\
@@ -2169,6 +2172,7 @@ str_buf_cat(VALUE str, const char *ptr, long len)
{
long capa, total, olen, off = -1;
char *sptr;
+ const int termlen = TERM_LEN(str);
RSTRING_GETMEM(str, sptr, olen);
if (ptr >= sptr && ptr <= sptr + olen) {
@@ -2198,7 +2202,7 @@ str_buf_cat(VALUE str, const char *ptr, long len)
}
capa = 2 * capa;
}
- RESIZE_CAPA(str, capa);
+ RESIZE_CAPA_TERM(str, capa, termlen);
sptr = RSTRING_PTR(str);
}
if (off != -1) {
@@ -2206,7 +2210,7 @@ str_buf_cat(VALUE str, const char *ptr, long len)
}
memcpy(sptr + olen, ptr, len);
STR_SET_LEN(str, total);
- RSTRING_PTR(str)[total] = '\0'; /* sentinel */
+ TERM_FILL(sptr + total, termlen); /* sentinel */
return str;
}