summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-10-10 02:34:24 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-10-10 02:34:24 +0000
commitb44c47d102763fbac164810884e3adcac64ef8ce (patch)
tree57288721b0d1a7d68048d6a986dbf1991cd77617 /io.c
parent0d3d17b907a93c64450aee62b440625c39dd8717 (diff)
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
Diffstat (limited to 'io.c')
-rw-r--r--io.c54
1 files changed, 54 insertions, 0 deletions
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