diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/file.c | 5 | ||||
| -rw-r--r-- | src/file_test.c | 5 | ||||
| -rw-r--r-- | src/io.c | 48 |
3 files changed, 37 insertions, 21 deletions
diff --git a/src/file.c b/src/file.c index 7868eafaf..324cc81f2 100644 --- a/src/file.c +++ b/src/file.c @@ -8,7 +8,12 @@ #include "mruby/class.h" #include "mruby/data.h" #include "mruby/string.h" + +#if MRUBY_RELEASE_NO < 10000 #include "error.h" +#else +#include "mruby/error.h" +#endif #include <fcntl.h> #include <limits.h> diff --git a/src/file_test.c b/src/file_test.c index 792440547..37b139c78 100644 --- a/src/file_test.c +++ b/src/file_test.c @@ -8,7 +8,12 @@ #include "mruby/class.h" #include "mruby/data.h" #include "mruby/string.h" + +#if MRUBY_RELEASE_NO < 10000 #include "error.h" +#else +#include "mruby/error.h" +#endif #if defined(_WIN32) || defined(_WIN64) #define LSTAT stat @@ -3,16 +3,19 @@ */ #include "mruby.h" - #include "mruby/hash.h" -#include "mruby/data.h" -#include "mruby/khash.h" #include "mruby/array.h" #include "mruby/class.h" +#include "mruby/data.h" #include "mruby/string.h" #include "mruby/variable.h" #include "mruby/ext/io.h" + +#if MRUBY_RELEASE_NO < 10000 #include "error.h" +#else +#include "mruby/error.h" +#endif #if defined(_WIN32) || defined(_WIN64) #include <io.h> @@ -25,9 +28,16 @@ #endif static int mrb_io_modestr_to_flags(mrb_state *mrb, const char *modestr); -static int mrb_io_modenum_to_flags(mrb_state *mrb, int modenum); static int mrb_io_flags_to_modenum(mrb_state *mrb, int flags); +#if MRUBY_RELEASE_NO < 10000 +static struct RClass * +mrb_module_get(mrb_state *mrb, const char *name) +{ + return mrb_class_get(mrb, name); +} +#endif + static int mrb_io_modestr_to_flags(mrb_state *mrb, const char *mode) { @@ -371,26 +381,22 @@ fptr_finalize(mrb_state *mrb, struct mrb_io *fptr, int noraise) } mrb_value -mrb_io_bless(mrb_state *mrb, mrb_value io) +mrb_io_s_for_fd(mrb_state *mrb, mrb_value klass) { - if (mrb_type(io) != MRB_TT_DATA) { - mrb_raise(mrb, E_TYPE_ERROR, "expected IO object"); - return mrb_nil_value(); - } - - DATA_TYPE(io) = &mrb_io_type; - DATA_PTR(io) = NULL; - DATA_PTR(io) = mrb_io_alloc(mrb); + mrb_value io = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type)); - return io; + return mrb_io_initialize(mrb, io); } mrb_value -mrb_io_s_for_fd(mrb_state *mrb, mrb_value klass) +mrb_io_s_sysclose(mrb_state *mrb, mrb_value klass) { - mrb_value io = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type)); - - return mrb_io_initialize(mrb, io); + mrb_int fd; + mrb_get_args(mrb, "i", &fd); + if (close(fd) == -1) { + mrb_sys_fail(mrb, "close"); + } + return mrb_fixnum_value(0); } mrb_value @@ -549,7 +555,7 @@ mrb_io_pid(mrb_state *mrb, mrb_value io) static struct timeval time2timeval(mrb_state *mrb, mrb_value time) { - struct timeval t; + struct timeval t = { 0, 0 }; switch (mrb_type(time)) { case MRB_TT_FIXNUM: @@ -762,12 +768,12 @@ mrb_init_io(mrb_state *mrb) mrb_include_module(mrb, io, mrb_module_get(mrb, "Enumerable")); /* 15.2.20.3 */ #ifndef _WIN32 mrb_define_class_method(mrb, io, "_popen", mrb_io_s_popen, MRB_ARGS_ANY()); + mrb_define_class_method(mrb, io, "_sysclose", mrb_io_s_sysclose, MRB_ARGS_REQ(1)); #endif mrb_define_class_method(mrb, io, "for_fd", mrb_io_s_for_fd, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(2)); - mrb_define_class_method(mrb, io, "sysopen", mrb_io_s_sysopen, MRB_ARGS_ANY()); mrb_define_class_method(mrb, io, "select", mrb_io_s_select, MRB_ARGS_ANY()); + mrb_define_class_method(mrb, io, "sysopen", mrb_io_s_sysopen, MRB_ARGS_ANY()); - mrb_define_method(mrb, io, "_bless", mrb_io_bless, MRB_ARGS_NONE()); mrb_define_method(mrb, io, "initialize", mrb_io_initialize, MRB_ARGS_ANY()); /* 15.2.20.5.21 (x)*/ mrb_define_method(mrb, io, "sysread", mrb_io_sysread, MRB_ARGS_ANY()); mrb_define_method(mrb, io, "sysseek", mrb_io_sysseek, MRB_ARGS_REQ(1)); |
