[#39604] [Bug #2323] "Z".."Z".succが空 — Hiro Asari <redmine@...>
Bug #2323: "Z".."Z".succが空
[#39606] [Feature:trunk] Dir instance methods for relative path — Nobuyoshi Nakada <nobu@...>
なかだです。
まつもと ゆきひろです
kosakiです
なかだです。
> なかだです。
まつもと ゆきひろです
成瀬です。
[#39642] [Bug #2338] 大きなFixnumを値にもつHash#hashが呼び出しごとに変わる — Yuki Sonoda <redmine@...>
Bug #2338: 大きなFixnumを値にもつHash#hashが呼び出しごとに変わる
44Oi44Or44Go55Sz44GX44G+44GZ44CCCgrku6XkuIvjga7nkrDlooPjgaflho3nj77jgZfjgabj
[#39660] [Bug:trunk] Enumerator.new {|y| y << 1 << 2 << 3 } — Yusuke ENDOH <mame@...>
遠藤です。
In article <e0b1e5700911110537u2aacf835pc0aea13d89a92cef@mail.gmail.com>,
遠藤です。
At Wed, 11 Nov 2009 23:50:47 +0900,
遠藤です。
[#39669] メンテナ確認プロセス終了。メンテナ募集 — "Yugui (Yuki Sonoda)" <yugui@...>
-----BEGIN PGP SIGNED MESSAGE-----
[#39685] [Feature #2366] private constant — Yusuke Endoh <redmine@...>
Feature #2366: private constant
まつもと ゆきひろです
チケット #2366 が更新されました。 (by Yusuke Endoh)
遠藤です。
=1B$B31$H$$$$$^$9!#=1B(B
遠藤です。
=1B$B31$H$$$$$^$9!#=1B(B
成瀬です。
=1B$B31$H$$$$$^$9!#=1B(B
遠藤です。
=1B$B31$H$$$$$^$9!#=1B(B
[#39696] [Feature #2372] read_all() with buffering — _ wanabe <redmine@...>
Feature #2372: read_all() with buffering
チケット #2372 が更新されました。 (by _ wanabe)
In article <4b0081d7e73af_8bc5c2a894735e@redmine.ruby-lang.org>,
[#39709] [Bug #2381] Math.gammaの挙動がx86_64とia64で異なる — Mitsuhiro TAKANO <redmine@...>
Bug #2381: Math.gammaの挙動がx86_64とia64で異なる
[#39714] Net::FTP で upload の resume ができない — Tomoyuki Chikanaga <chikanag@...>
近永と申します。
[#39720] hidden objectって? — keiju@... (Keiju ISHITSUKA)
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
以下のコミット以降、後述の現象が発生するそうです。
[#39743] String::gsubにおけるinvalid byte sequenceの検出について — TAKEGAWA Hiroshi <takegawa@...>
竹川と申します。
[#39755] RbConfig.rubybin — Tanaka Akira <akr@...>
ruby コマンドのパス名を返す RbConfig.rubybin というメソッド
須藤です。
In article <20091123.123808.1122146273169400964.kou@cozmixng.org>,
> In article <20091123.123808.1122146273169400964.kou@cozmixng.org>,
須藤です。
At Mon, 30 Nov 2009 19:28:39 +0900,
[#39760] [Bug #2395] 可視性の変更による alias されたメソッドの無効化 — _ wanabe <redmine@...>
Bug #2395: 可視性の変更による alias されたメソッドの無効化
[#39796] バグ? ブロック引数で to_ary が呼ばれる必要のない場面で呼ばれる — keiju@... (Keiju ISHITSUKA)
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
まつもと ゆきひろです
[ruby-dev:39708] Re: [Feature #2372](Closed) read_all() with buffering
In article <8964790c0911152109l5400b295v201958dd8625971a@mail.gmail.com>,
wanabe <s.wanabe@gmail.com> writes:
> すみません、ご指摘ありがとうございます。
> 見落としていました。取り急ぎ、rb_protect でくくるようにして再度コミットしました。
思うんですが、ワナベさんがやりたかったのはむしろ
ECONV_AFTER_OUTPUT を外したかったということなんじゃないです
かねぇ。
こうするとこちらでは速くなる感じですが、そちらではどうでしょ
う。
% svn diff --diff-cmd diff -x '-u -p'
Index: io.c
===================================================================
--- io.c (revision 25821)
+++ io.c (working copy)
@@ -1582,17 +1582,22 @@ make_readconv(rb_io_t *fptr, int size)
}
}
-static int
-more_char(rb_io_t *fptr)
+#define MORE_CHAR_CBUF_FULL Qtrue
+#define MORE_CHAR_FINISHED Qnil
+static VALUE
+fill_cbuf(rb_io_t *fptr, int ec_flags)
{
const unsigned char *ss, *sp, *se;
unsigned char *ds, *dp, *de;
rb_econv_result_t res;
int putbackable;
int cbuf_len0;
+ VALUE exc;
+
+ ec_flags |= ECONV_PARTIAL_INPUT;
if (fptr->cbuf_len == fptr->cbuf_capa)
- return 0; /* cbuf full */
+ return MORE_CHAR_CBUF_FULL; /* cbuf full */
if (fptr->cbuf_len == 0)
fptr->cbuf_off = 0;
else if (fptr->cbuf_off + fptr->cbuf_len == fptr->cbuf_capa) {
@@ -1607,7 +1612,7 @@ more_char(rb_io_t *fptr)
se = sp + fptr->rbuf_len;
ds = dp = (unsigned char *)fptr->cbuf + fptr->cbuf_off + fptr->cbuf_len;
de = (unsigned char *)fptr->cbuf + fptr->cbuf_capa;
- res = rb_econv_convert(fptr->readconv, &sp, se, &dp, de, ECONV_PARTIAL_INPUT|ECONV_AFTER_OUTPUT);
+ res = rb_econv_convert(fptr->readconv, &sp, se, &dp, de, ec_flags);
fptr->rbuf_off += (int)(sp - ss);
fptr->rbuf_len -= (int)(sp - ss);
fptr->cbuf_len += (int)(dp - ds);
@@ -1619,13 +1624,15 @@ more_char(rb_io_t *fptr)
fptr->rbuf_len += putbackable;
}
- rb_econv_check_error(fptr->readconv);
+ exc = rb_econv_make_exception(fptr->readconv);
+ if (!NIL_P(exc))
+ return exc;
if (cbuf_len0 != fptr->cbuf_len)
- return 0;
+ return MORE_CHAR_CBUF_FULL;
if (res == econv_finished) {
- return -1;
+ return MORE_CHAR_FINISHED;
}
if (res == econv_source_buffer_empty) {
@@ -1645,6 +1652,16 @@ more_char(rb_io_t *fptr)
}
static VALUE
+more_char(rb_io_t *fptr)
+{
+ VALUE v;
+ v = fill_cbuf(fptr, ECONV_AFTER_OUTPUT);
+ if (v != MORE_CHAR_CBUF_FULL && v != MORE_CHAR_FINISHED)
+ rb_exc_raise(v);
+ return v;
+}
+
+static VALUE
io_shift_cbuf(rb_io_t *fptr, int len, VALUE *strp)
{
VALUE str;
@@ -1665,7 +1682,7 @@ io_shift_cbuf(rb_io_t *fptr, int len, VA
/* xxx: set coderange */
if (fptr->cbuf_len == 0)
fptr->cbuf_off = 0;
- if (fptr->cbuf_off < fptr->cbuf_capa/2) {
+ else if (fptr->cbuf_capa/2 < fptr->cbuf_off) {
memmove(fptr->cbuf, fptr->cbuf+fptr->cbuf_off, fptr->cbuf_len);
fptr->cbuf_off = 0;
}
@@ -1686,21 +1703,19 @@ read_all(rb_io_t *fptr, long siz, VALUE
else rb_str_set_len(str, 0);
make_readconv(fptr, 0);
while (1) {
- int fin, state = 0;
-
- if (fptr->cbuf_len > fptr->cbuf_capa / 2) {
+ VALUE v;
+ if (fptr->cbuf_len) {
io_shift_cbuf(fptr, fptr->cbuf_len, &str);
}
-
- fin = rb_protect((VALUE (*)(VALUE))more_char, (VALUE)fptr, &state);
- if (fin == -1 || state != 0) {
- if (fptr->cbuf_len) {
- io_shift_cbuf(fptr, fptr->cbuf_len, &str);
- }
- if (state != 0) {
- rb_jump_tag(state);
- }
- clear_readconv(fptr);
+ v = fill_cbuf(fptr, 0);
+ if (v != MORE_CHAR_CBUF_FULL && v != MORE_CHAR_FINISHED) {
+ if (fptr->cbuf_len) {
+ io_shift_cbuf(fptr, fptr->cbuf_len, &str);
+ }
+ rb_exc_raise(v);
+ }
+ if (v == MORE_CHAR_FINISHED) {
+ clear_readconv(fptr);
return io_enc_str(str, fptr);
}
}
@@ -2181,7 +2196,7 @@ appendline(rb_io_t *fptr, int delim, VAL
return (unsigned char)RSTRING_PTR(str)[RSTRING_LEN(str)-1];
}
}
- } while (more_char(fptr) != -1);
+ } while (more_char(fptr) != MORE_CHAR_FINISHED);
clear_readconv(fptr);
*lp = limit;
return EOF;
@@ -2695,7 +2710,8 @@ io_getc(rb_io_t *fptr, rb_encoding *enc)
}
}
- if (more_char(fptr) == -1) {
+ if (more_char(fptr) == MORE_CHAR_FINISHED) {
+ clear_readconv(fptr);
if (fptr->cbuf_len == 0)
return Qnil;
/* return an incomplete character just before EOF */
@@ -2830,8 +2846,8 @@ rb_io_each_codepoint(VALUE io)
rb_raise(rb_eIOError, "too long character");
}
}
- if (more_char(fptr) == -1) {
- clear_readconv(fptr);
+ if (more_char(fptr) == MORE_CHAR_FINISHED) {
+ clear_readconv(fptr);
/* ignore an incomplete character before EOF */
return io;
}
--
[田中 哲][たなか あきら][Tanaka Akira]