* io.c (io_getc): set coderange while getting characters.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15863 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
70153a6a73
commit
839dc7f9ab
@ -1,3 +1,7 @@
|
|||||||
|
Mon Mar 31 04:05:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
|
||||||
|
|
||||||
|
* io.c (io_getc): set coderange while getting characters.
|
||||||
|
|
||||||
Sun Mar 30 23:16:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
|
Sun Mar 30 23:16:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
* proc.c (proc_dup): should copy is_lambda attribute as well.
|
* proc.c (proc_dup): should copy is_lambda attribute as well.
|
||||||
|
67
io.c
67
io.c
@ -2231,39 +2231,56 @@ rb_io_each_byte(VALUE io)
|
|||||||
static VALUE
|
static VALUE
|
||||||
io_getc(rb_io_t *fptr, rb_encoding *enc)
|
io_getc(rb_io_t *fptr, rb_encoding *enc)
|
||||||
{
|
{
|
||||||
int r, n;
|
int r, n, cr = 0;
|
||||||
VALUE str;
|
VALUE str;
|
||||||
|
|
||||||
if (io_fillbuf(fptr) < 0) {
|
if (io_fillbuf(fptr) < 0) {
|
||||||
return Qnil;
|
return Qnil;
|
||||||
}
|
}
|
||||||
r = rb_enc_precise_mbclen(fptr->rbuf+fptr->rbuf_off, fptr->rbuf+fptr->rbuf_off+fptr->rbuf_len, enc);
|
if (rb_enc_asciicompat(enc) && ISASCII(fptr->rbuf[fptr->rbuf_off])) {
|
||||||
if (MBCLEN_CHARFOUND_P(r) &&
|
str = rb_str_new(fptr->rbuf+fptr->rbuf_off, 1);
|
||||||
(n = MBCLEN_CHARFOUND_LEN(r)) <= fptr->rbuf_len) {
|
fptr->rbuf_off += 1;
|
||||||
str = rb_str_new(fptr->rbuf+fptr->rbuf_off, n);
|
fptr->rbuf_len -= 1;
|
||||||
fptr->rbuf_off += n;
|
cr = ENC_CODERANGE_7BIT;
|
||||||
fptr->rbuf_len -= n;
|
|
||||||
}
|
|
||||||
else if (MBCLEN_NEEDMORE_P(r)) {
|
|
||||||
str = rb_str_new(fptr->rbuf+fptr->rbuf_off, fptr->rbuf_len);
|
|
||||||
fptr->rbuf_len = 0;
|
|
||||||
getc_needmore:
|
|
||||||
if (io_fillbuf(fptr) != -1) {
|
|
||||||
rb_str_cat(str, fptr->rbuf+fptr->rbuf_off, 1);
|
|
||||||
fptr->rbuf_off++;
|
|
||||||
fptr->rbuf_len--;
|
|
||||||
r = rb_enc_precise_mbclen(RSTRING_PTR(str), RSTRING_PTR(str)+RSTRING_LEN(str), enc);
|
|
||||||
if (MBCLEN_NEEDMORE_P(r)) {
|
|
||||||
goto getc_needmore;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
str = rb_str_new(fptr->rbuf+fptr->rbuf_off, 1);
|
r = rb_enc_precise_mbclen(fptr->rbuf+fptr->rbuf_off, fptr->rbuf+fptr->rbuf_off+fptr->rbuf_len, enc);
|
||||||
fptr->rbuf_off++;
|
if (MBCLEN_CHARFOUND_P(r) &&
|
||||||
fptr->rbuf_len--;
|
(n = MBCLEN_CHARFOUND_LEN(r)) <= fptr->rbuf_len) {
|
||||||
|
str = rb_str_new(fptr->rbuf+fptr->rbuf_off, n);
|
||||||
|
fptr->rbuf_off += n;
|
||||||
|
fptr->rbuf_len -= n;
|
||||||
|
cr = ENC_CODERANGE_VALID;
|
||||||
|
}
|
||||||
|
else if (MBCLEN_NEEDMORE_P(r)) {
|
||||||
|
str = rb_str_new(fptr->rbuf+fptr->rbuf_off, fptr->rbuf_len);
|
||||||
|
fptr->rbuf_len = 0;
|
||||||
|
getc_needmore:
|
||||||
|
if (io_fillbuf(fptr) != -1) {
|
||||||
|
rb_str_cat(str, fptr->rbuf+fptr->rbuf_off, 1);
|
||||||
|
fptr->rbuf_off++;
|
||||||
|
fptr->rbuf_len--;
|
||||||
|
r = rb_enc_precise_mbclen(RSTRING_PTR(str), RSTRING_PTR(str)+RSTRING_LEN(str), enc);
|
||||||
|
if (MBCLEN_NEEDMORE_P(r)) {
|
||||||
|
goto getc_needmore;
|
||||||
|
}
|
||||||
|
else if (MBCLEN_CHARFOUND_P(r)) {
|
||||||
|
cr = ENC_CODERANGE_VALID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
str = rb_str_new(fptr->rbuf+fptr->rbuf_off, 1);
|
||||||
|
fptr->rbuf_off++;
|
||||||
|
fptr->rbuf_len--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return io_enc_str(str, fptr);
|
if (!cr) cr = ENC_CODERANGE_BROKEN;
|
||||||
|
str = io_enc_str(str, fptr);
|
||||||
|
if (!fptr->enc2) {
|
||||||
|
ENC_CODERANGE_SET(str, cr);
|
||||||
|
}
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#define RUBY_VERSION "1.9.0"
|
#define RUBY_VERSION "1.9.0"
|
||||||
#define RUBY_RELEASE_DATE "2008-03-29"
|
#define RUBY_RELEASE_DATE "2008-03-31"
|
||||||
#define RUBY_VERSION_CODE 190
|
#define RUBY_VERSION_CODE 190
|
||||||
#define RUBY_RELEASE_CODE 20080329
|
#define RUBY_RELEASE_CODE 20080331
|
||||||
#define RUBY_PATCHLEVEL 0
|
#define RUBY_PATCHLEVEL 0
|
||||||
|
|
||||||
#define RUBY_VERSION_MAJOR 1
|
#define RUBY_VERSION_MAJOR 1
|
||||||
@ -9,7 +9,7 @@
|
|||||||
#define RUBY_VERSION_TEENY 0
|
#define RUBY_VERSION_TEENY 0
|
||||||
#define RUBY_RELEASE_YEAR 2008
|
#define RUBY_RELEASE_YEAR 2008
|
||||||
#define RUBY_RELEASE_MONTH 3
|
#define RUBY_RELEASE_MONTH 3
|
||||||
#define RUBY_RELEASE_DAY 29
|
#define RUBY_RELEASE_DAY 31
|
||||||
|
|
||||||
#ifdef RUBY_EXTERN
|
#ifdef RUBY_EXTERN
|
||||||
RUBY_EXTERN const char ruby_version[];
|
RUBY_EXTERN const char ruby_version[];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user