diff --git a/ChangeLog b/ChangeLog index 29cdc7e973..e7b5aa608d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Thu Aug 16 06:29:08 2007 Nobuyoshi Nakada + + * io.c (argf_readpartial): argf_forward needs argc and argv. + Thu Aug 16 02:47:39 2007 Koichi Sasada * cont.c (rb_fiber_m_yield): added. use this function diff --git a/io.c b/io.c index 176159c01b..e78fd6c5f6 100644 --- a/io.c +++ b/io.c @@ -5384,9 +5384,16 @@ argf_read(int argc, VALUE *argv) return str; } +struct argf_call_arg { + int argc; + VALUE *argv; +}; + static VALUE -argf_readpartial_rescue(VALUE dummy) +argf_forward_call(VALUE arg) { + struct argf_call_arg *p = (struct argf_call_arg *)arg; + argf_forward(p->argc, p->argv); return Qnil; } @@ -5406,9 +5413,11 @@ argf_readpartial(int argc, VALUE *argv) rb_eof_error(); } if (current_file == rb_stdin && TYPE(current_file) != T_FILE) { - tmp = rb_rescue2(argf_forward, (VALUE)argv, - argf_readpartial_rescue, (VALUE)Qnil, - rb_eEOFError, (VALUE)0); + struct argf_call_arg arg; + arg.argc = argc; + arg.argv = argv; + tmp = rb_rescue2(argf_forward_call, (VALUE)&arg, + RUBY_METHOD_FUNC(0), Qnil, rb_eEOFError, (VALUE)0); } else { tmp = io_getpartial(argc, argv, current_file, 0);