From 3c03385e2e5f4d1d87c5ebcd35c92a41619c9f96 Mon Sep 17 00:00:00 2001 From: dearblue Date: Sat, 11 Apr 2020 11:18:47 +0900 Subject: Check the file descriptor with `IO#initialize`; resolve #4966 --- mrbgems/mruby-io/src/io.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'mrbgems/mruby-io/src') diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 8b0dcb244..c7273bce8 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -645,6 +645,43 @@ mrb_io_initialize_copy(mrb_state *mrb, mrb_value copy) return copy; } +static void +check_file_descriptor(mrb_state *mrb, mrb_int fd) +{ + struct stat sb; + int fdi = (int)fd; + +#if MRB_INT_MIN < INT_MIN || MRB_INT_MAX > INT_MAX + if (fdi != fd) { + goto badfd; + } +#endif + +#ifdef _WIN32 + { + DWORD err; + int len = sizeof(err); + + if (getsockopt(fdi, SOL_SOCKET, SO_ERROR, (char*)&err, &len) == 0) { + return; + } + } + + if (fdi < 0 || fdi > _getmaxstdio()) { + goto badfd; + } +#endif /* _WIN32 */ + + if (fstat(fdi, &sb) != 0) { + goto badfd; + } + + return; + +badfd: + mrb_sys_fail(mrb, "bad file descriptor"); +} + mrb_value mrb_io_initialize(mrb_state *mrb, mrb_value io) { @@ -656,6 +693,7 @@ mrb_io_initialize(mrb_state *mrb, mrb_value io) mode = opt = mrb_nil_value(); mrb_get_args(mrb, "i|oo", &fd, &mode, &opt); + check_file_descriptor(mrb, fd); if (mrb_nil_p(mode)) { mode = mrb_str_new_cstr(mrb, "r"); } -- cgit v1.2.3 From 7add524041df0f2482e587ec1a3920c6f34624a4 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 10 Apr 2020 15:36:33 +0900 Subject: Selecting fd should be less than `FD_SETSIZE`; close #4966 --- mrbgems/mruby-io/src/io.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'mrbgems/mruby-io/src') diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 8b0dcb244..50265ba25 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -1155,6 +1155,7 @@ mrb_io_s_select(mrb_state *mrb, mrb_value klass) for (i = 0; i < RARRAY_LEN(read); i++) { read_io = RARRAY_PTR(read)[i]; fptr = io_get_open_fptr(mrb, read_io); + if (fptr->fd >= FD_SETSIZE) continue; FD_SET(fptr->fd, rp); if (mrb_io_read_data_pending(mrb, read_io)) { pending++; @@ -1177,6 +1178,7 @@ mrb_io_s_select(mrb_state *mrb, mrb_value klass) FD_ZERO(wp); for (i = 0; i < RARRAY_LEN(write); i++) { fptr = io_get_open_fptr(mrb, RARRAY_PTR(write)[i]); + if (fptr->fd >= FD_SETSIZE) continue; FD_SET(fptr->fd, wp); if (max < fptr->fd) max = fptr->fd; @@ -1196,6 +1198,7 @@ mrb_io_s_select(mrb_state *mrb, mrb_value klass) FD_ZERO(ep); for (i = 0; i < RARRAY_LEN(except); i++) { fptr = io_get_open_fptr(mrb, RARRAY_PTR(except)[i]); + if (fptr->fd >= FD_SETSIZE) continue; FD_SET(fptr->fd, ep); if (max < fptr->fd) max = fptr->fd; -- cgit v1.2.3 From e51923778f15c4627dea30ba29e3b3843951c260 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 28 Apr 2020 12:04:23 +0900 Subject: Fix `IO#sysread` to update buffer string on `EOF`; ref #4982 --- mrbgems/mruby-io/src/io.c | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) (limited to 'mrbgems/mruby-io/src') diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index a79db4f17..8d278289e 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -927,7 +927,8 @@ mrb_io_sysread_common(mrb_state *mrb, if (RSTRING_LEN(buf) != maxlen) { buf = mrb_str_resize(mrb, buf, maxlen); - } else { + } + else { mrb_str_modify(mrb, RSTRING(buf)); } @@ -936,24 +937,15 @@ mrb_io_sysread_common(mrb_state *mrb, mrb_raise(mrb, E_IO_ERROR, "not opened for reading"); } ret = readfunc(fptr->fd, RSTRING_PTR(buf), (fsize_t)maxlen, offset); - switch (ret) { - case 0: /* EOF */ - if (maxlen == 0) { - buf = mrb_str_new_cstr(mrb, ""); - } else { - mrb_raise(mrb, E_EOF_ERROR, "sysread failed: End of File"); - } - break; - case -1: /* Error */ - mrb_sys_fail(mrb, "sysread failed"); - break; - default: - if (RSTRING_LEN(buf) != ret) { - buf = mrb_str_resize(mrb, buf, ret); - } - break; + if (ret < 0) { + mrb_sys_fail(mrb, "sysread failed"); + } + if (RSTRING_LEN(buf) != ret) { + buf = mrb_str_resize(mrb, buf, ret); + } + if (ret == 0 && maxlen > 0) { + mrb_raise(mrb, E_EOF_ERROR, "sysread failed: End of File"); } - return buf; } -- cgit v1.2.3 From b87268f130c4a29f4be4172409dbe12cddb4e2f9 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 28 Apr 2020 13:18:43 +0900 Subject: Fix `IO#readchar` to support UTF-8 char reading; fix #4712 This fix only effective when `MRB_UTF8_STRING` is set. --- mrbgems/mruby-io/mrblib/io.rb | 7 ++++--- mrbgems/mruby-io/src/io.c | 44 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 43 insertions(+), 8 deletions(-) (limited to 'mrbgems/mruby-io/src') diff --git a/mrbgems/mruby-io/mrblib/io.rb b/mrbgems/mruby-io/mrblib/io.rb index ce33f2367..e43b81004 100644 --- a/mrbgems/mruby-io/mrblib/io.rb +++ b/mrbgems/mruby-io/mrblib/io.rb @@ -283,9 +283,10 @@ class IO def readchar _read_buf - c = @buf[0] - @buf[0] = "" - c + _readchar(@buf) +# c = @buf[0] +# @buf[0] = "" +# c end def getc diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 8d278289e..794a3c491 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -1454,14 +1454,13 @@ mrb_io_pwrite(mrb_state *mrb, mrb_value io) #endif /* MRB_WITH_IO_PREAD_PWRITE */ static mrb_value -io_bufread(mrb_state *mrb, mrb_value self) +io_bufread(mrb_state *mrb, mrb_value str, mrb_int len) { - mrb_value str, str2; - mrb_int len, newlen; + mrb_value str2; + mrb_int newlen; struct RString *s; char *p; - mrb_get_args(mrb, "Si", &str, &len); s = RSTRING(str); mrb_str_modify(mrb, s); p = RSTR_PTR(s); @@ -1474,6 +1473,40 @@ io_bufread(mrb_state *mrb, mrb_value self) return str2; } +static mrb_value +mrb_io_bufread(mrb_state *mrb, mrb_value self) +{ + mrb_value str; + mrb_int len; + + mrb_get_args(mrb, "Si", &str, &len); + return io_bufread(mrb, str, len); +} + +static mrb_value +mrb_io_readchar(mrb_state *mrb, mrb_value self) +{ + mrb_value buf; + unsigned char c; + mrb_int len = 1; + + mrb_get_args(mrb, "S", &buf); + mrb_assert(RSTRING_PTR(buf) > 0); +#ifdef MRB_UTF8_STRING + c = RSTRING_PTR(buf)[0]; + if (c & 0x80) { + len = mrb_utf8len(RSTRING_PTR(buf), RSTRING_END(buf)); + if (len == 1 && RSTRING_LEN(buf) < 5) { /* partial UTF-8 */ + /* refill the buffer */ + mrb_value b = mrb_io_sysread_common(mrb, mrb_sysread_dummy, self, mrb_nil_value(), 4096, 0); + mrb_str_concat(mrb, buf, b); + } + len = mrb_utf8len(RSTRING_PTR(buf), RSTRING_END(buf)); + } +#endif + return io_bufread(mrb, buf, len); +} + void mrb_init_io(mrb_state *mrb) { @@ -1511,5 +1544,6 @@ mrb_init_io(mrb_state *mrb) mrb_define_method(mrb, io, "pread", mrb_io_pread, MRB_ARGS_ANY()); /* ruby 2.5 feature */ mrb_define_method(mrb, io, "pwrite", mrb_io_pwrite, MRB_ARGS_ANY()); /* ruby 2.5 feature */ - mrb_define_class_method(mrb, io, "_bufread", io_bufread, MRB_ARGS_REQ(2)); + mrb_define_method(mrb, io, "_readchar", mrb_io_readchar, MRB_ARGS_REQ(1)); + mrb_define_class_method(mrb, io, "_bufread", mrb_io_bufread, MRB_ARGS_REQ(2)); } -- cgit v1.2.3 From 8627157298cb1443bd8562a8fc0740acfb018974 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 28 Apr 2020 17:59:40 +0900 Subject: Fix `IO#readchar` to return broken UTF-8 rather than `EOF` error. The behavior is different from CRuby, but we believe this is a right behavior for mruby, which only supports either ASCII or UTF-8 exclusively; fix #4983, ref #4982 ``` $ printf '\xe3\x81' | ruby -e 'p STDIN.readchar' "\xE3\x81" ``` ``` $ printf '\xe3\x81' | mruby -e 'p STDIN.readchar' "\xE3" ``` --- mrbgems/mruby-io/mrblib/io.rb | 5 ++--- mrbgems/mruby-io/src/io.c | 17 ++++++++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) (limited to 'mrbgems/mruby-io/src') diff --git a/mrbgems/mruby-io/mrblib/io.rb b/mrbgems/mruby-io/mrblib/io.rb index e43b81004..e597db886 100644 --- a/mrbgems/mruby-io/mrblib/io.rb +++ b/mrbgems/mruby-io/mrblib/io.rb @@ -284,15 +284,14 @@ class IO def readchar _read_buf _readchar(@buf) -# c = @buf[0] -# @buf[0] = "" -# c end def getc begin readchar rescue EOFError + c = @buf[0] + @buf[0,1]="" if c nil end end diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 794a3c491..8d215e781 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -1492,14 +1492,25 @@ mrb_io_readchar(mrb_state *mrb, mrb_value self) mrb_get_args(mrb, "S", &buf); mrb_assert(RSTRING_PTR(buf) > 0); + mrb_str_modify(mrb, RSTRING(buf)); #ifdef MRB_UTF8_STRING c = RSTRING_PTR(buf)[0]; if (c & 0x80) { len = mrb_utf8len(RSTRING_PTR(buf), RSTRING_END(buf)); - if (len == 1 && RSTRING_LEN(buf) < 5) { /* partial UTF-8 */ + if (len == 1 && RSTRING_LEN(buf) < 4) { /* partial UTF-8 */ + mrb_int blen = RSTRING_LEN(buf); + ssize_t n; + + struct mrb_io *fptr = (struct mrb_io*)io_get_open_fptr(mrb, self); + + if (!fptr->readable) { + mrb_raise(mrb, E_IO_ERROR, "not opened for reading"); + } /* refill the buffer */ - mrb_value b = mrb_io_sysread_common(mrb, mrb_sysread_dummy, self, mrb_nil_value(), 4096, 0); - mrb_str_concat(mrb, buf, b); + mrb_str_resize(mrb, buf, 4096); + n = read(fptr->fd, RSTRING_PTR(buf)+blen, 4096-blen); + if (n < 0) mrb_sys_fail(mrb, "sysread failed"); + mrb_str_resize(mrb, buf, blen+n); } len = mrb_utf8len(RSTRING_PTR(buf), RSTRING_END(buf)); } -- cgit v1.2.3 From 7277682cfbabcf2eb518339508043e96e59b5a99 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 28 Apr 2020 22:31:00 +0900 Subject: Remove unused local variable if `MRB_UTF8_STRING` is not set. Ref #4982 #4983 --- mrbgems/mruby-io/src/io.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'mrbgems/mruby-io/src') diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 8d215e781..57f4025d6 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -1487,8 +1487,10 @@ static mrb_value mrb_io_readchar(mrb_state *mrb, mrb_value self) { mrb_value buf; - unsigned char c; mrb_int len = 1; +#ifdef MRB_UTF8_STRING + unsigned char c; +#endif mrb_get_args(mrb, "S", &buf); mrb_assert(RSTRING_PTR(buf) > 0); -- cgit v1.2.3 From 49bba6c997d44f31d8e3bc4ec8f857c06fd0e5b6 Mon Sep 17 00:00:00 2001 From: dearblue Date: Wed, 29 Apr 2020 17:18:09 +0900 Subject: Avoid comparing pointers and integers --- mrbgems/mruby-io/src/io.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mrbgems/mruby-io/src') diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 57f4025d6..3d9d2b48a 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -1493,7 +1493,7 @@ mrb_io_readchar(mrb_state *mrb, mrb_value self) #endif mrb_get_args(mrb, "S", &buf); - mrb_assert(RSTRING_PTR(buf) > 0); + mrb_assert(RSTRING_PTR(buf) != NULL); mrb_str_modify(mrb, RSTRING(buf)); #ifdef MRB_UTF8_STRING c = RSTRING_PTR(buf)[0]; -- cgit v1.2.3 From 2fcdd3f8eb3daa6efe4a25230a40f85499686c7e Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 29 Apr 2020 18:37:29 +0900 Subject: Add assertion as originally intended; ref #4986 --- mrbgems/mruby-io/src/io.c | 1 + 1 file changed, 1 insertion(+) (limited to 'mrbgems/mruby-io/src') diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 3d9d2b48a..c0d2a51d7 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -1493,6 +1493,7 @@ mrb_io_readchar(mrb_state *mrb, mrb_value self) #endif mrb_get_args(mrb, "S", &buf); + mrb_assert(RSTRING_LEN(buf) > 0); mrb_assert(RSTRING_PTR(buf) != NULL); mrb_str_modify(mrb, RSTRING(buf)); #ifdef MRB_UTF8_STRING -- cgit v1.2.3 From d64c4d64e6ae461fbca2e4cdb057ba14e254de8f Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 11 May 2020 10:14:25 +0900 Subject: Make `off_t` handling simpler; #4872 #4939 The newer `clang` warns implicit float conversions. --- mrbgems/mruby-io/src/file.c | 26 +++----------------------- mrbgems/mruby-io/src/io.c | 17 +---------------- 2 files changed, 4 insertions(+), 39 deletions(-) (limited to 'mrbgems/mruby-io/src') diff --git a/mrbgems/mruby-io/src/file.c b/mrbgems/mruby-io/src/file.c index e166d82fa..004eb0a5f 100644 --- a/mrbgems/mruby-io/src/file.c +++ b/mrbgems/mruby-io/src/file.c @@ -458,7 +458,7 @@ mrb_file_size(mrb_state *mrb, mrb_value self) } static int -mrb_ftruncate(int fd, int64_t length) +mrb_ftruncate(int fd, mrb_int length) { #ifndef _WIN32 return ftruncate(fd, (off_t)length); @@ -491,32 +491,12 @@ static mrb_value mrb_file_truncate(mrb_state *mrb, mrb_value self) { int fd; - int64_t length; + mrb_int length; mrb_value lenv; fd = mrb_io_fileno(mrb, self); mrb_get_args(mrb, "o", &lenv); - switch (mrb_type(lenv)) { -#ifndef MRB_WITHOUT_FLOAT - case MRB_TT_FLOAT: - { - mrb_float lenf = mrb_float(lenv); - if (lenf > INT64_MAX) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "length too large"); - } - length = (int64_t)lenf; - } - break; -#endif - case MRB_TT_FIXNUM: - default: - { - mrb_int leni = mrb_int(mrb, lenv); - length = (int64_t)leni; - } - break; - } - + length = mrb_int(mrb, lenv); if (mrb_ftruncate(fd, length) != 0) { mrb_raise(mrb, E_IO_ERROR, "ftruncate failed"); } diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index c0d2a51d7..3bf3d28be 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -1404,22 +1404,7 @@ mrb_io_sync(mrb_state *mrb, mrb_value self) static off_t value2off(mrb_state *mrb, mrb_value offv) { - switch (mrb_type(offv)) { -#ifndef MRB_WITHOUT_FLOAT - case MRB_TT_FLOAT: - { - mrb_float tmp = mrb_float(offv); - if (tmp < INT64_MIN || tmp > INT64_MAX) { - /* fall through to use convert by `mrb_int()` (and raise error if out of range) */ - } else { - return (off_t)tmp; - } - } - /* fall through */ -#endif /* MRB_WITHOUT_FLOAT */ - default: - return (off_t)mrb_int(mrb, offv); - } + return (off_t)mrb_int(mrb, offv); } /* -- cgit v1.2.3 From ce12ef7e5ccc3923d7d7da43ee577722f57d33e6 Mon Sep 17 00:00:00 2001 From: dearblue Date: Sat, 1 Feb 2020 15:53:21 +0900 Subject: Hiding method implementation C functions in mruby-io --- mrbgems/mruby-io/src/file.c | 6 ++--- mrbgems/mruby-io/src/file_test.c | 18 +++++++------- mrbgems/mruby-io/src/io.c | 44 +++++++++++++++++------------------ mrbgems/mruby-io/test/mruby_io_test.c | 2 +- 4 files changed, 35 insertions(+), 35 deletions(-) (limited to 'mrbgems/mruby-io/src') diff --git a/mrbgems/mruby-io/src/file.c b/mrbgems/mruby-io/src/file.c index 004eb0a5f..dd65e2da9 100644 --- a/mrbgems/mruby-io/src/file.c +++ b/mrbgems/mruby-io/src/file.c @@ -89,7 +89,7 @@ flock(int fd, int operation) { } #endif -mrb_value +static mrb_value mrb_file_s_umask(mrb_state *mrb, mrb_value klass) { #if defined(_WIN32) || defined(_WIN64) @@ -265,7 +265,7 @@ mrb_file_realpath(mrb_state *mrb, mrb_value klass) return result; } -mrb_value +static mrb_value mrb_file__getwd(mrb_state *mrb, mrb_value klass) { mrb_value path; @@ -401,7 +401,7 @@ mrb_file_mtime(mrb_state *mrb, mrb_value self) return mrb_funcall(mrb, obj, "at", 1, mrb_fixnum_value(st.st_mtime)); } -mrb_value +static mrb_value mrb_file_flock(mrb_state *mrb, mrb_value self) { #if defined(sun) diff --git a/mrbgems/mruby-io/src/file_test.c b/mrbgems/mruby-io/src/file_test.c index d75cbd598..19fd5739b 100644 --- a/mrbgems/mruby-io/src/file_test.c +++ b/mrbgems/mruby-io/src/file_test.c @@ -85,7 +85,7 @@ mrb_lstat(mrb_state *mrb, mrb_value obj, struct stat *st) * File.directory?(".") */ -mrb_value +static mrb_value mrb_filetest_s_directory_p(mrb_state *mrb, mrb_value klass) { #ifndef S_ISDIR @@ -112,7 +112,7 @@ mrb_filetest_s_directory_p(mrb_state *mrb, mrb_value klass) * Returns true if the named file is a pipe. */ -mrb_value +static mrb_value mrb_filetest_s_pipe_p(mrb_state *mrb, mrb_value klass) { #if defined(_WIN32) || defined(_WIN64) @@ -145,7 +145,7 @@ mrb_filetest_s_pipe_p(mrb_state *mrb, mrb_value klass) * Returns true if the named file is a symbolic link. */ -mrb_value +static mrb_value mrb_filetest_s_symlink_p(mrb_state *mrb, mrb_value klass) { #if defined(_WIN32) || defined(_WIN64) @@ -188,7 +188,7 @@ mrb_filetest_s_symlink_p(mrb_state *mrb, mrb_value klass) * Returns true if the named file is a socket. */ -mrb_value +static mrb_value mrb_filetest_s_socket_p(mrb_state *mrb, mrb_value klass) { #if defined(_WIN32) || defined(_WIN64) @@ -232,7 +232,7 @@ mrb_filetest_s_socket_p(mrb_state *mrb, mrb_value klass) * Return true if the named file exists. */ -mrb_value +static mrb_value mrb_filetest_s_exist_p(mrb_state *mrb, mrb_value klass) { struct stat st; @@ -253,7 +253,7 @@ mrb_filetest_s_exist_p(mrb_state *mrb, mrb_value klass) * regular file. */ -mrb_value +static mrb_value mrb_filetest_s_file_p(mrb_state *mrb, mrb_value klass) { #ifndef S_ISREG @@ -281,7 +281,7 @@ mrb_filetest_s_file_p(mrb_state *mrb, mrb_value klass) * a zero size. */ -mrb_value +static mrb_value mrb_filetest_s_zero_p(mrb_state *mrb, mrb_value klass) { struct stat st; @@ -306,7 +306,7 @@ mrb_filetest_s_zero_p(mrb_state *mrb, mrb_value klass) * _file_name_ can be an IO object. */ -mrb_value +static mrb_value mrb_filetest_s_size(mrb_state *mrb, mrb_value klass) { struct stat st; @@ -328,7 +328,7 @@ mrb_filetest_s_size(mrb_state *mrb, mrb_value klass) * file otherwise. */ -mrb_value +static mrb_value mrb_filetest_s_size_p(mrb_state *mrb, mrb_value klass) { struct stat st; diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 3bf3d28be..ef1283b51 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -341,7 +341,7 @@ option_to_fd(mrb_state *mrb, mrb_value hash, const char *key) } #ifdef _WIN32 -mrb_value +static mrb_value mrb_io_s_popen(mrb_state *mrb, mrb_value klass) { mrb_value cmd, io; @@ -439,14 +439,14 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass) return io; } #elif defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE -mrb_value +static mrb_value mrb_io_s_popen(mrb_state *mrb, mrb_value klass) { mrb_raise(mrb, E_NOTIMP_ERROR, "IO#popen is not supported on the platform"); return mrb_false_value(); } #else -mrb_value +static mrb_value mrb_io_s_popen(mrb_state *mrb, mrb_value klass) { mrb_value cmd, io, result; @@ -596,7 +596,7 @@ mrb_dup(mrb_state *mrb, int fd, mrb_bool *failed) return new_fd; } -mrb_value +static mrb_value mrb_io_initialize_copy(mrb_state *mrb, mrb_value copy) { mrb_value orig; @@ -682,7 +682,7 @@ badfd: mrb_sys_fail(mrb, "bad file descriptor"); } -mrb_value +static mrb_value mrb_io_initialize(mrb_state *mrb, mrb_value io) { struct mrb_io *fptr; @@ -785,7 +785,7 @@ fptr_finalize(mrb_state *mrb, struct mrb_io *fptr, int quiet) } } -mrb_value +static mrb_value mrb_io_check_readable(mrb_state *mrb, mrb_value self) { struct mrb_io *fptr = io_get_open_fptr(mrb, self); @@ -795,7 +795,7 @@ mrb_io_check_readable(mrb_state *mrb, mrb_value self) return mrb_nil_value(); } -mrb_value +static mrb_value mrb_io_isatty(mrb_state *mrb, mrb_value self) { struct mrb_io *fptr; @@ -806,7 +806,7 @@ mrb_io_isatty(mrb_state *mrb, mrb_value self) return mrb_true_value(); } -mrb_value +static mrb_value mrb_io_s_for_fd(mrb_state *mrb, mrb_value klass) { struct RClass *c = mrb_class_ptr(klass); @@ -819,7 +819,7 @@ mrb_io_s_for_fd(mrb_state *mrb, mrb_value klass) return mrb_io_initialize(mrb, obj); } -mrb_value +static mrb_value mrb_io_s_sysclose(mrb_state *mrb, mrb_value klass) { mrb_int fd; @@ -830,7 +830,7 @@ mrb_io_s_sysclose(mrb_state *mrb, mrb_value klass) return mrb_fixnum_value(0); } -int +static int mrb_cloexec_open(mrb_state *mrb, const char *pathname, mrb_int flags, mrb_int mode) { int fd, retry = FALSE; @@ -865,7 +865,7 @@ reopen: return fd; } -mrb_value +static mrb_value mrb_io_s_sysopen(mrb_state *mrb, mrb_value klass) { mrb_value path = mrb_nil_value(); @@ -895,7 +895,7 @@ mrb_sysread_dummy(int fd, void *buf, fsize_t nbytes, off_t offset) return (mrb_io_read_write_size)read(fd, buf, nbytes); } -mrb_value +static mrb_value mrb_io_sysread(mrb_state *mrb, mrb_value io) { mrb_value buf = mrb_nil_value(); @@ -949,7 +949,7 @@ mrb_io_sysread_common(mrb_state *mrb, return buf; } -mrb_value +static mrb_value mrb_io_sysseek(mrb_state *mrb, mrb_value io) { struct mrb_io *fptr; @@ -1009,7 +1009,7 @@ mrb_syswrite_dummy(int fd, const void *buf, fsize_t nbytes, off_t offset) return (mrb_io_read_write_size)write(fd, buf, nbytes); } -mrb_value +static mrb_value mrb_io_syswrite(mrb_state *mrb, mrb_value io) { mrb_value buf; @@ -1019,7 +1019,7 @@ mrb_io_syswrite(mrb_state *mrb, mrb_value io) return mrb_io_syswrite_common(mrb, mrb_syswrite_dummy, io, buf, 0); } -mrb_value +static mrb_value mrb_io_close(mrb_state *mrb, mrb_value self) { struct mrb_io *fptr; @@ -1028,7 +1028,7 @@ mrb_io_close(mrb_state *mrb, mrb_value self) return mrb_nil_value(); } -mrb_value +static mrb_value mrb_io_close_write(mrb_state *mrb, mrb_value self) { struct mrb_io *fptr; @@ -1039,7 +1039,7 @@ mrb_io_close_write(mrb_state *mrb, mrb_value self) return mrb_nil_value(); } -mrb_value +static mrb_value mrb_io_closed(mrb_state *mrb, mrb_value io) { struct mrb_io *fptr; @@ -1051,7 +1051,7 @@ mrb_io_closed(mrb_state *mrb, mrb_value io) return mrb_true_value(); } -mrb_value +static mrb_value mrb_io_pid(mrb_state *mrb, mrb_value io) { struct mrb_io *fptr; @@ -1317,7 +1317,7 @@ mrb_io_fileno_m(mrb_state *mrb, mrb_value io) return mrb_fixnum_value(fd); } -mrb_value +static mrb_value mrb_io_close_on_exec_p(mrb_state *mrb, mrb_value self) { #if defined(F_GETFD) && defined(F_SETFD) && defined(FD_CLOEXEC) @@ -1341,7 +1341,7 @@ mrb_io_close_on_exec_p(mrb_state *mrb, mrb_value self) #endif } -mrb_value +static mrb_value mrb_io_set_close_on_exec(mrb_state *mrb, mrb_value self) { #if defined(F_GETFD) && defined(F_SETFD) && defined(FD_CLOEXEC) @@ -1377,7 +1377,7 @@ mrb_io_set_close_on_exec(mrb_state *mrb, mrb_value self) #endif } -mrb_value +static mrb_value mrb_io_set_sync(mrb_state *mrb, mrb_value self) { struct mrb_io *fptr; @@ -1389,7 +1389,7 @@ mrb_io_set_sync(mrb_state *mrb, mrb_value self) return mrb_bool_value(b); } -mrb_value +static mrb_value mrb_io_sync(mrb_state *mrb, mrb_value self) { struct mrb_io *fptr; diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index d4c8eb13c..8bc87a0d4 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -210,7 +210,7 @@ mrb_io_test_rmdir(mrb_state *mrb, mrb_value klass) return mrb_true_value(); } -mrb_value +static mrb_value mrb_io_win_p(mrb_state *mrb, mrb_value klass) { #if defined(_WIN32) || defined(_WIN64) -- cgit v1.2.3