io.c:3656
static VALUE
rb_io_s_foreach(argc, argv)
    int argc;
    VALUE *argv;
{
    VALUE fname, io;
    OpenFile *fptr;
    struct foreach_arg arg;

    rb_scan_args(argc, argv, "11", &fname, &arg.sep);
    SafeStringValue(fname);

    if (argc == 1) {
	arg.sep = rb_default_rs;
    }
    io = rb_io_open(RSTRING(fname)->ptr, "r");
    if (NIL_P(io)) return Qnil;
    GetOpenFile(io, fptr);
    arg.fptr = fptr;

    return rb_ensure(io_s_foreach, (VALUE)&arg, rb_io_close, io);
}
