From b44c47d102763fbac164810884e3adcac64ef8ce Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 10 Oct 2014 02:34:24 +0000 Subject: io.c: move RFile initialization * io.c (rb_io_make_open_file): move from include/ruby/io.h, and hide too detailed implementations. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47863 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- io.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'io.c') diff --git a/io.c b/io.c index 6f04deb7b0..12757f1d96 100644 --- a/io.c +++ b/io.c @@ -7374,6 +7374,60 @@ rb_io_stdio_file(rb_io_t *fptr) return fptr->stdio_file; } +static inline void +rb_io_buffer_init(rb_io_buffer_t *buf) +{ + buf->ptr = NULL; + buf->off = 0; + buf->len = 0; + buf->capa = 0; +} + +static inline rb_io_t * +rb_io_fptr_new(void) +{ + rb_io_t *fp = ALLOC(rb_io_t); + fp->fd = -1; + fp->stdio_file = NULL; + fp->mode = 0; + fp->pid = 0; + fp->lineno = 0; + fp->pathv = Qnil; + fp->finalize = 0; + rb_io_buffer_init(&fp->wbuf); + rb_io_buffer_init(&fp->rbuf); + rb_io_buffer_init(&fp->cbuf); + fp->readconv = NULL; + fp->writeconv = NULL; + fp->writeconv_asciicompat = Qnil; + fp->writeconv_pre_ecflags = 0; + fp->writeconv_pre_ecopts = Qnil; + fp->writeconv_initialized = 0; + fp->tied_io_for_writing = 0; + fp->encs.enc = NULL; + fp->encs.enc2 = NULL; + fp->encs.ecflags = 0; + fp->encs.ecopts = Qnil; + fp->write_lock = 0; + return fp; +} + +rb_io_t * +rb_io_make_open_file(VALUE obj) +{ + rb_io_t *fp = 0; + + Check_Type(obj, T_FILE); + if (RFILE(obj)->fptr) { + rb_io_close(obj); + rb_io_fptr_finalize(RFILE(obj)->fptr);\ + RFILE(obj)->fptr = 0; + } + fp = rb_io_fptr_new(); + RFILE(obj)->fptr = fp; + return fp; +} + /* * call-seq: * IO.new(fd [, mode] [, opt]) -> io -- cgit v1.2.3