summaryrefslogtreecommitdiff
path: root/encoding.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-12-11 03:08:50 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-12-11 03:08:50 +0000
commit5802768b40e50cabfbfe0a198a44e01cbad9faae (patch)
tree04a037e87e0e86eac5a46d8582c77836767f53d2 /encoding.c
parent9ee1ab0e28c3e9538941a55f1703a1a1ffd5cddf (diff)
* 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.c14
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