Project

General

Profile

Feature #1081 » 0001-io.c-io_s_write-io_s_binwrite-Re-add-IO.write-binwri.patch

runpaint (Run Paint Run Run), 03/07/2010 02:32 AM

View differences:

io.c
return rb_ensure(io_s_read, (VALUE)&arg, rb_io_close, arg.io);
}
struct write_arg {
VALUE io, str;
};
static VALUE
io_s_write(struct write_arg *arg)
{
return io_write(arg->io, arg->str, 0);
}
/* Opens _path_ with mode _mode_, writes _str_ to it, then closes the file. */
static VALUE
io_s_write_mode(VALUE path, VALUE str, const char *mode, VALUE io)
{
struct write_arg warg;
FilePathValue(path);
warg.str = str;
warg.io = rb_io_open(path, rb_str_new_cstr(mode), Qnil, Qnil);
if (NIL_P(warg.io)) return Qnil;
return rb_ensure(io_s_write, (VALUE)&warg, rb_io_close, warg.io);
}
/*
* call-seq:
* IO.write(path, string) => fixnum
*
* Opens and truncates the file at <tt>path</tt>, writes <tt>string</tt> to
* it, then returns the number of bytes written. If you need more control
* over the writing process consider IO.open instead.
*
* IO.write("testfile", "0123456789") #=> 10
*/
static VALUE
rb_io_s_write(int argc, VALUE path, VALUE str, VALUE io)
{
const char *mode = "w";
return io_s_write_mode(path, str, mode, io);
}
/*
* call-seq:
* IO.binwrite(path, string) => fixnum
*
* Opens the file <tt>path</tt> in binary mode (open mode: "wb:ASCII-8BIT"),
* writes <tt>string</tt> to it, then returns the number of bytes written. If
* you need more control over the writing process consider IO.open instead.
*
* IO.binwrite("testfile", "0123456789") #=> 10
*/
static VALUE
rb_io_s_binwrite(int argc, VALUE path, VALUE str, VALUE io)
{
const char *mode = "wb:ASCII-8BIT";
return io_s_write_mode(path, str, mode, io);
}
struct copy_stream_struct {
VALUE src;
VALUE dst;
......
rb_define_singleton_method(rb_cIO, "readlines", rb_io_s_readlines, -1);
rb_define_singleton_method(rb_cIO, "read", rb_io_s_read, -1);
rb_define_singleton_method(rb_cIO, "binread", rb_io_s_binread, -1);
rb_define_singleton_method(rb_cIO, "write", rb_io_s_write, 2);
rb_define_singleton_method(rb_cIO, "binwrite", rb_io_s_binwrite, 2);
rb_define_singleton_method(rb_cIO, "select", rb_f_select, -1);
rb_define_singleton_method(rb_cIO, "pipe", rb_io_s_pipe, -1);
rb_define_singleton_method(rb_cIO, "try_convert", rb_io_s_try_convert, 1);
(1-1/6)