summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-11-05 01:54:22 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-11-05 01:54:22 +0000
commit3614f8bd1c813916054079055d13462e90808a96 (patch)
tree630977a8a3021123bf01dd0e3639f9b2215e1a8d /string.c
parent6c41b73decf61254ac9c3bc3fc0e1d0169d5b524 (diff)
string.c: wchar terminator
* string.c (rb_str_lstrip_bang, rb_str_rstrip_bang): terminate wchar strings with wchar 0. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48275 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r--string.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/string.c b/string.c
index d9b5c7d601..0ba2962a66 100644
--- a/string.c
+++ b/string.c
@@ -7198,11 +7198,11 @@ static VALUE
rb_str_lstrip_bang(VALUE str)
{
rb_encoding *enc;
- char *s, *t, *e;
+ char *start, *s, *t, *e;
str_modify_keep_cr(str);
enc = STR_ENC_GET(str);
- s = RSTRING_PTR(str);
+ start = s = RSTRING_PTR(str);
if (!s || RSTRING_LEN(str) == 0) return Qnil;
e = t = RSTRING_END(str);
/* remove spaces at head */
@@ -7215,9 +7215,10 @@ rb_str_lstrip_bang(VALUE str)
}
if (s > RSTRING_PTR(str)) {
- STR_SET_LEN(str, t-s);
- memmove(RSTRING_PTR(str), s, RSTRING_LEN(str));
- RSTRING_PTR(str)[RSTRING_LEN(str)] = '\0';
+ long len = t - s;
+ memmove(start, s, len);
+ STR_SET_LEN(str, len);
+ TERM_FILL(start+len, rb_enc_mbminlen(enc));
return str;
}
return Qnil;
@@ -7260,12 +7261,12 @@ static VALUE
rb_str_rstrip_bang(VALUE str)
{
rb_encoding *enc;
- char *s, *t, *e;
+ char *start, *s, *t, *e;
str_modify_keep_cr(str);
enc = STR_ENC_GET(str);
rb_str_check_dummy_enc(enc);
- s = RSTRING_PTR(str);
+ start = s = RSTRING_PTR(str);
if (!s || RSTRING_LEN(str) == 0) return Qnil;
t = e = RSTRING_END(str);
@@ -7284,10 +7285,10 @@ rb_str_rstrip_bang(VALUE str)
}
}
if (t < e) {
- long len = t-RSTRING_PTR(str);
+ long len = t-start;
STR_SET_LEN(str, len);
- RSTRING_PTR(str)[len] = '\0';
+ TERM_FILL(start+len, rb_enc_mbminlen(enc));
return str;
}
return Qnil;