internal static IO prep_stdio(Stream f, int mode, Class klass) { IO io = new IO(klass); io.Init(f, mode); return io; }
internal static IO rb_file_open(Frame caller, string fname, string mode) { IO io = new IO(Ruby.Runtime.Init.rb_cIO); int mode1 = IO.rb_io_mode_flags(caller, mode); int mode2 = rb_io_mode_modenum(caller, mode); FileMode fm = IO.modenumToFileMode(mode2); FileAccess fa = IO.modenumToFileAccess(mode2); io.Init(fname, fm, fa, mode1); return io; }
internal static object rb_open_file(IO io, Frame caller, Array rest) { Class.rb_scan_args(caller, rest, 1, 2, false); object vmode = null, perm = null; if (rest.Count > 1) vmode = rest[1]; if (rest.Count > 2) perm = rest[2]; string fname = String.SafeStringValue(rest[0], caller); if (vmode is int || perm != null) { int flags; if (vmode is int) flags = (int)vmode; else flags = IO.rb_io_mode_modenum(caller, String.SafeStringValue(vmode, caller)); // TODO: fmode / perm not used //int fmode = (perm == null) ? 438 /*0666*/ : Integer.rb_num2long(perm); io.Init(fname, IO.modenumToFileMode(flags), IO.modenumToFileAccess(flags), IO.rb_io_modenum_flags(flags)); } else { string mode = (vmode == null) ? "r" : String.StringValue(vmode, caller); int flags = IO.rb_io_mode_modenum(caller, mode); io.Init(fname, IO.modenumToFileMode(flags), IO.modenumToFileAccess(flags), IO.rb_io_mode_flags(caller, mode)); } return io; }