diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-29 19:16:02 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-29 19:16:02 +0000 |
commit | 3d7f8c2320d13fcc0c12e8910d70a812dab2f681 (patch) | |
tree | f1e5efc85efec12556c8e6a27dda8e550172a9e7 /string.c | |
parent | 24385e708ec111dc199c27d937c04656d6f8e6d9 (diff) | |
download | ruby-3d7f8c2320d13fcc0c12e8910d70a812dab2f681.tar.gz |
* string.c (str_gsub): should not use mbclen2() which has broken API.
* re.c: remove rb_reg_mbclen2().
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13308 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r-- | string.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -2244,7 +2244,8 @@ str_gsub(int argc, VALUE *argv, VALUE str, int bang) int iter = 0; char *buf, *bp, *sp, *cp; int tainted = 0; - + rb_encoding *enc; + switch (argc) { case 1: RETURN_ENUMERATOR(str, argc, argv); @@ -2260,6 +2261,7 @@ str_gsub(int argc, VALUE *argv, VALUE str, int bang) } pat = get_pat(argv[0], 1); + enc = rb_enc_get(pat); offset=0; n=0; beg = rb_reg_search(pat, str, 0, 0); if (beg < 0) { @@ -2314,7 +2316,7 @@ str_gsub(int argc, VALUE *argv, VALUE str, int bang) * in order to prevent infinite loops. */ if (RSTRING_LEN(str) <= END(0)) break; - len = mbclen2(RSTRING_PTR(str)[END(0)], pat); + len = rb_enc_mbclen(RSTRING_PTR(str)+END(0), enc); memcpy(bp, RSTRING_PTR(str)+END(0), len); bp += len; offset = END(0) + len; |