diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-12-11 03:08:50 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-12-11 03:08:50 +0000 |
commit | 5802768b40e50cabfbfe0a198a44e01cbad9faae (patch) | |
tree | 04a037e87e0e86eac5a46d8582c77836767f53d2 /encoding.c | |
parent | 9ee1ab0e28c3e9538941a55f1703a1a1ffd5cddf (diff) | |
download | ruby-5802768b40e50cabfbfe0a198a44e01cbad9faae.tar.gz |
* encoding.c (rb_enc_get_ascii): add an argument to provide the
length of the returned character.
* include/ruby/encoding.h (rb_enc_get_ascii): add the argument.
* re.c (rb_reg_expr_str): modify rb_enc_get_ascii call.
(rb_reg_quote): ditto.
(rb_reg_regsub): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14190 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'encoding.c')
-rw-r--r-- | encoding.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/encoding.c b/encoding.c index 21b56f2636..5949b17bfd 100644 --- a/encoding.c +++ b/encoding.c @@ -505,22 +505,26 @@ rb_enc_precise_mbclen(const char *p, const char *e, rb_encoding *enc) return n; } -int rb_enc_get_ascii(const char *p, const char *e, rb_encoding *enc) +int rb_enc_get_ascii(const char *p, const char *e, int *len, rb_encoding *enc) { int c, l; if (e <= p) return -1; if (rb_enc_asciicompat(enc)) { c = (unsigned char)*p; - return ISASCII(c) ? c : -1; + if (!ISASCII(c)) + return -1; + if (len) *len = 1; + return c; } l = rb_enc_precise_mbclen(p, e, enc); if (!MBCLEN_CHARFOUND(l)) return -1; c = rb_enc_codepoint(p, e, enc); - if (rb_enc_isascii(c, enc)) - return c; - return -1; + if (!rb_enc_isascii(c, enc)) + return -1; + if (len) *len = l; + return c; } int |