ruby-changes:4372
From: ko1@a...
Date: Mon, 31 Mar 2008 04:17:05 +0900 (JST)
Subject: [ruby-changes:4372] naruse - Ruby:r15863 (trunk): * io.c (io_getc): set coderange while getting characters.
naruse 2008-03-31 04:16:29 +0900 (Mon, 31 Mar 2008) New Revision: 15863 Modified files: trunk/ChangeLog trunk/io.c trunk/version.h Log: * io.c (io_getc): set coderange while getting characters. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/version.h?r1=15863&r2=15862&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15863&r2=15862&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/io.c?r1=15863&r2=15862&diff_format=u Index: ChangeLog =================================================================== --- ChangeLog (revision 15862) +++ ChangeLog (revision 15863) @@ -1,3 +1,7 @@ +Mon Mar 31 04:05:15 2008 NARUSE, Yui <naruse@r...> + + * io.c (io_getc): set coderange while getting characters. + Sun Mar 30 23:16:49 2008 Yukihiro Matsumoto <matz@r...> * proc.c (proc_dup): should copy is_lambda attribute as well. Index: io.c =================================================================== --- io.c (revision 15862) +++ io.c (revision 15863) @@ -2228,42 +2228,59 @@ return io; } -static VALUE +static VALUE io_getc(rb_io_t *fptr, rb_encoding *enc) { - int r, n; + int r, n, cr = 0; VALUE str; if (io_fillbuf(fptr) < 0) { return Qnil; } - r = rb_enc_precise_mbclen(fptr->rbuf+fptr->rbuf_off, fptr->rbuf+fptr->rbuf_off+fptr->rbuf_len, enc); - if (MBCLEN_CHARFOUND_P(r) && - (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; + if (rb_enc_asciicompat(enc) && ISASCII(fptr->rbuf[fptr->rbuf_off])) { + str = rb_str_new(fptr->rbuf+fptr->rbuf_off, 1); + fptr->rbuf_off += 1; + fptr->rbuf_len -= 1; + cr = ENC_CODERANGE_7BIT; } - 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 { - str = rb_str_new(fptr->rbuf+fptr->rbuf_off, 1); - fptr->rbuf_off++; - fptr->rbuf_len--; + r = rb_enc_precise_mbclen(fptr->rbuf+fptr->rbuf_off, fptr->rbuf+fptr->rbuf_off+fptr->rbuf_len, enc); + if (MBCLEN_CHARFOUND_P(r) && + (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; } /* Index: version.h =================================================================== --- version.h (revision 15862) +++ version.h (revision 15863) @@ -1,7 +1,7 @@ #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_RELEASE_CODE 20080329 +#define RUBY_RELEASE_CODE 20080331 #define RUBY_PATCHLEVEL 0 #define RUBY_VERSION_MAJOR 1 @@ -9,7 +9,7 @@ #define RUBY_VERSION_TEENY 0 #define RUBY_RELEASE_YEAR 2008 #define RUBY_RELEASE_MONTH 3 -#define RUBY_RELEASE_DAY 29 +#define RUBY_RELEASE_DAY 31 #ifdef RUBY_EXTERN RUBY_EXTERN const char ruby_version[]; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/