示例#1
0
        internal static IO prep_stdio(Stream f, int mode, Class klass)
        {
            IO io = new IO(klass);

            io.Init(f, mode);

            return io;
        }
示例#2
0
        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;
        }
示例#3
0
        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;
        }