From 3486675e00d530b5efde4072b34f708bbe236fd4 Mon Sep 17 00:00:00 2001 From: Uchio Kondo Date: Tue, 28 Apr 2020 01:33:50 +0900 Subject: Test mruby-io in tmpdir when AF_UNIX cannot be created on cwd --- mrbgems/mruby-io/test/mruby_io_test.c | 46 +++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'mrbgems/mruby-io') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index 44b8acebb..ac6ab530a 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -1,6 +1,7 @@ #include #include #include +#include #if defined(_WIN32) || defined(_WIN64) @@ -57,6 +58,7 @@ mkdtemp(char *temp) #include #include +#include #include "mruby.h" #include "mruby/array.h" @@ -65,9 +67,48 @@ mkdtemp(char *temp) #include "mruby/variable.h" #include +int wd_save; +int socket_available_p; + +static int mrb_io_socket_abailable() +{ + int fd, retval = 1; + struct sockaddr_un sun0; + char socketname[] = "tmp.mruby-io-socket-ok.XXXXXXXX"; + if (!(fd = mkstemp(socketname))) { + retval = 0; + goto sock_test_out; + } + unlink(socketname); + close(fd); + fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (fd == -1) { + retval = 0; + goto sock_test_out; + } + sun0.sun_family = AF_UNIX; + snprintf(sun0.sun_path, sizeof(sun0.sun_path), "%s", socketname); + if (bind(fd, (struct sockaddr *)&sun0, sizeof(sun0)) == -1) { + retval = 0; + } +sock_test_out: + close(fd); + return retval; +} + static mrb_value mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) { + if(!(socket_available_p = mrb_io_socket_abailable())) { + char *tmpdir; + wd_save = open(".", O_DIRECTORY); + tmpdir = getenv("TMPDIR"); + if (tmpdir) + assert(!chdir(tmpdir)); + else + assert(!chdir("/tmp")); + } + char rfname[] = "tmp.mruby-io-test-r.XXXXXXXX"; char wfname[] = "tmp.mruby-io-test-w.XXXXXXXX"; char symlinkname[] = "tmp.mruby-io-test-l.XXXXXXXX"; @@ -176,6 +217,11 @@ mrb_io_test_io_cleanup(mrb_state *mrb, mrb_value self) mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_socketname"), mrb_nil_value()); mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_msg"), mrb_nil_value()); + if(!socket_available_p) { + assert(!fchdir(wd_save)); + close(wd_save); + } + return mrb_nil_value(); } -- cgit v1.2.3 From 4b81bce48d2e489eb1d1ffb9f4b90ddb7f10ae62 Mon Sep 17 00:00:00 2001 From: Uchio Kondo Date: Tue, 28 Apr 2020 01:45:46 +0900 Subject: Follow C90 style --- mrbgems/mruby-io/test/mruby_io_test.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'mrbgems/mruby-io') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index ac6ab530a..2026dbd45 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -99,16 +99,6 @@ sock_test_out: static mrb_value mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) { - if(!(socket_available_p = mrb_io_socket_abailable())) { - char *tmpdir; - wd_save = open(".", O_DIRECTORY); - tmpdir = getenv("TMPDIR"); - if (tmpdir) - assert(!chdir(tmpdir)); - else - assert(!chdir("/tmp")); - } - char rfname[] = "tmp.mruby-io-test-r.XXXXXXXX"; char wfname[] = "tmp.mruby-io-test-w.XXXXXXXX"; char symlinkname[] = "tmp.mruby-io-test-l.XXXXXXXX"; @@ -123,6 +113,16 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) struct sockaddr_un sun0; #endif + if(!(socket_available_p = mrb_io_socket_abailable())) { + char *tmpdir; + wd_save = open(".", O_DIRECTORY); + tmpdir = getenv("TMPDIR"); + if (tmpdir) + assert(!chdir(tmpdir)); + else + assert(!chdir("/tmp")); + } + mask = umask(077); fd0 = mkstemp(rfname); fd1 = mkstemp(wfname); -- cgit v1.2.3 From 508ac2030e1f1218d7a6b4e140c0d7bf8c7b7dc3 Mon Sep 17 00:00:00 2001 From: Uchio Kondo Date: Tue, 28 Apr 2020 01:49:39 +0900 Subject: Skip socket check on windows --- mrbgems/mruby-io/test/mruby_io_test.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'mrbgems/mruby-io') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index 2026dbd45..1cbb1057c 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -70,6 +70,7 @@ mkdtemp(char *temp) int wd_save; int socket_available_p; +#if !defined(_WIN32) && !defined(_WIN64) static int mrb_io_socket_abailable() { int fd, retval = 1; @@ -95,6 +96,7 @@ sock_test_out: close(fd); return retval; } +#endif static mrb_value mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) @@ -111,7 +113,6 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) #if !defined(_WIN32) && !defined(_WIN64) int fd2, fd3; struct sockaddr_un sun0; -#endif if(!(socket_available_p = mrb_io_socket_abailable())) { char *tmpdir; @@ -122,6 +123,7 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) else assert(!chdir("/tmp")); } +#endif mask = umask(077); fd0 = mkstemp(rfname); @@ -217,10 +219,12 @@ mrb_io_test_io_cleanup(mrb_state *mrb, mrb_value self) mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_socketname"), mrb_nil_value()); mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_msg"), mrb_nil_value()); +#if !defined(_WIN32) && !defined(_WIN64) if(!socket_available_p) { assert(!fchdir(wd_save)); close(wd_save); } +#endif return mrb_nil_value(); } -- cgit v1.2.3 From 6e13467ce8d59334639045a710ddd93193d643e5 Mon Sep 17 00:00:00 2001 From: Uchio Kondo Date: Tue, 28 Apr 2020 01:52:56 +0900 Subject: Fix typo and include location --- mrbgems/mruby-io/test/mruby_io_test.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'mrbgems/mruby-io') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index 1cbb1057c..2200b750b 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -1,7 +1,6 @@ #include #include #include -#include #if defined(_WIN32) || defined(_WIN64) @@ -54,11 +53,12 @@ mkdtemp(char *temp) #include #include #include + #include + #include #endif #include #include -#include #include "mruby.h" #include "mruby/array.h" @@ -71,7 +71,7 @@ int wd_save; int socket_available_p; #if !defined(_WIN32) && !defined(_WIN64) -static int mrb_io_socket_abailable() +static int mrb_io_socket_available() { int fd, retval = 1; struct sockaddr_un sun0; @@ -114,7 +114,7 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) int fd2, fd3; struct sockaddr_un sun0; - if(!(socket_available_p = mrb_io_socket_abailable())) { + if(!(socket_available_p = mrb_io_socket_available())) { char *tmpdir; wd_save = open(".", O_DIRECTORY); tmpdir = getenv("TMPDIR"); -- cgit v1.2.3 From b3c5d94bd1e51b7eb7647735ee3e9cba4e16d5e1 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 28 Apr 2020 12:03:32 +0900 Subject: Update `IO#ungetc` to keep `@buf` string; ref #4982 --- mrbgems/mruby-io/mrblib/io.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mrbgems/mruby-io') diff --git a/mrbgems/mruby-io/mrblib/io.rb b/mrbgems/mruby-io/mrblib/io.rb index 5df1932df..c0cfdc403 100644 --- a/mrbgems/mruby-io/mrblib/io.rb +++ b/mrbgems/mruby-io/mrblib/io.rb @@ -182,9 +182,9 @@ class IO def ungetc(substr) raise TypeError.new "expect String, got #{substr.class}" unless substr.is_a?(String) if @buf.empty? - @buf = substr.dup + @buf.replace(substr) else - @buf = substr + @buf + @buf[0,0] = substr end nil end -- cgit v1.2.3 From a2b87c033a3239e0d9c5fce1166d2d653ab5704f 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') diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 8b0dcb244..e05149014 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -889,7 +889,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)); } @@ -898,24 +899,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 e77e6e9d1237a6999a1e1bb6dcd2c7fa8e6187b4 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 28 Apr 2020 12:05:14 +0900 Subject: Fix `_read_buf` to be more efficient; fix #4982 The bug was introduced by #4712. The `getc' problem resurrected. It should be addressed soon. --- mrbgems/mruby-io/mrblib/io.rb | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'mrbgems/mruby-io') diff --git a/mrbgems/mruby-io/mrblib/io.rb b/mrbgems/mruby-io/mrblib/io.rb index c0cfdc403..ce33f2367 100644 --- a/mrbgems/mruby-io/mrblib/io.rb +++ b/mrbgems/mruby-io/mrblib/io.rb @@ -170,13 +170,8 @@ class IO end def _read_buf - return @buf if @buf && @buf.bytesize >= 4 # maximum UTF-8 character is 4 bytes - @buf ||= "" - begin - @buf += sysread(BUF_SIZE) - rescue EOFError => e - raise e if @buf.empty? - end + return @buf if @buf && @buf.bytesize > 0 + sysread(BUF_SIZE, @buf) end def ungetc(substr) -- cgit v1.2.3 From 45bd372755171cee72fd547f3295653918231f77 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') 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 e05149014..332539ba5 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -1413,14 +1413,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); @@ -1433,6 +1432,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) { @@ -1470,5 +1503,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 6b839b231971f058656521dc39bd4f27968230c6 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') 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 332539ba5..b28223f36 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -1451,14 +1451,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 d464fe50033084df6f171956d2fa051e4448c22f Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 28 Apr 2020 18:13:43 +0900 Subject: Remove the temporary file from the `AF_UNIX` socket test; #4981 --- mrbgems/mruby-io/test/mruby_io_test.c | 1 + 1 file changed, 1 insertion(+) (limited to 'mrbgems/mruby-io') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index 2200b750b..18635fb55 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -93,6 +93,7 @@ static int mrb_io_socket_available() retval = 0; } sock_test_out: + unlink(socketname); close(fd); return retval; } -- cgit v1.2.3 From 9f4b5227fe21ad778d3b408c12315168307ae25f Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 28 Apr 2020 18:30:50 +0900 Subject: Avoid `snprintf` in `mruby-io` test; ref #4981 --- mrbgems/mruby-io/test/mruby_io_test.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'mrbgems/mruby-io') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index 18635fb55..36872e7b7 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -77,22 +77,21 @@ static int mrb_io_socket_available() struct sockaddr_un sun0; char socketname[] = "tmp.mruby-io-socket-ok.XXXXXXXX"; if (!(fd = mkstemp(socketname))) { - retval = 0; goto sock_test_out; } unlink(socketname); close(fd); fd = socket(AF_UNIX, SOCK_STREAM, 0); if (fd == -1) { - retval = 0; goto sock_test_out; } sun0.sun_family = AF_UNIX; - snprintf(sun0.sun_path, sizeof(sun0.sun_path), "%s", socketname); + strncpy(sun0.sun_path, socketname, sizeof(sun0.sun_path)); if (bind(fd, (struct sockaddr *)&sun0, sizeof(sun0)) == -1) { retval = 0; } sock_test_out: + retval = 0; unlink(socketname); close(fd); return retval; @@ -181,7 +180,7 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) mrb_raise(mrb, E_RUNTIME_ERROR, "can't make a socket"); } sun0.sun_family = AF_UNIX; - snprintf(sun0.sun_path, sizeof(sun0.sun_path), "%s", socketname); + strncpy(sun0.sun_path, socketname, sizeof(sun0.sun_path)); if (bind(fd3, (struct sockaddr *)&sun0, sizeof(sun0)) == -1) { mrb_raisef(mrb, E_RUNTIME_ERROR, "can't bind AF_UNIX socket to %s: %d", sun0.sun_path, -- cgit v1.2.3 From 1cdcd00cc082b7e1f47ac28f8f1cf83474ffe5e7 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') diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index b28223f36..7d620a6a7 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -1446,8 +1446,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 7dc0fe66c7d0356211d48076e22028987bbbc0a9 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 28 Apr 2020 22:32:12 +0900 Subject: Add `#include ` on all platforms for `strncpy`; #4981 --- mrbgems/mruby-io/test/mruby_io_test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mrbgems/mruby-io') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index 36872e7b7..e023b1904 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -1,6 +1,7 @@ #include #include #include +#include #if defined(_WIN32) || defined(_WIN64) @@ -8,7 +9,6 @@ #include #include #include -#include #include #include -- cgit v1.2.3 From b652a4ff1426d8832f2678e7a00de43b3b0aea4c Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 28 Apr 2020 22:33:32 +0900 Subject: Fixed wrong condition in #4981. --- mrbgems/mruby-io/test/mruby_io_test.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'mrbgems/mruby-io') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index e023b1904..7165d09cc 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -73,7 +73,7 @@ int socket_available_p; #if !defined(_WIN32) && !defined(_WIN64) static int mrb_io_socket_available() { - int fd, retval = 1; + int fd, retval = 0; struct sockaddr_un sun0; char socketname[] = "tmp.mruby-io-socket-ok.XXXXXXXX"; if (!(fd = mkstemp(socketname))) { @@ -87,11 +87,10 @@ static int mrb_io_socket_available() } sun0.sun_family = AF_UNIX; strncpy(sun0.sun_path, socketname, sizeof(sun0.sun_path)); - if (bind(fd, (struct sockaddr *)&sun0, sizeof(sun0)) == -1) { - retval = 0; + if (bind(fd, (struct sockaddr *)&sun0, sizeof(sun0)) == 0) { + retval = 1; } sock_test_out: - retval = 0; unlink(socketname); close(fd); return retval; -- cgit v1.2.3 From 5e01674b72cf8205a94e157af893dcd34e27a306 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 28 Apr 2020 22:36:32 +0900 Subject: Should not use `assert` with expressions with side-effect; ref #4981 `assert()` can be completely removed when `NDEBUG` is set. --- mrbgems/mruby-io/test/mruby_io_test.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'mrbgems/mruby-io') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index 7165d09cc..4dce48c26 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -53,7 +53,6 @@ mkdtemp(char *temp) #include #include #include - #include #include #endif @@ -117,10 +116,8 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) char *tmpdir; wd_save = open(".", O_DIRECTORY); tmpdir = getenv("TMPDIR"); - if (tmpdir) - assert(!chdir(tmpdir)); - else - assert(!chdir("/tmp")); + if (tmpdir) chdir(tmpdir); + else chdir("/tmp"); } #endif @@ -220,7 +217,7 @@ mrb_io_test_io_cleanup(mrb_state *mrb, mrb_value self) #if !defined(_WIN32) && !defined(_WIN64) if(!socket_available_p) { - assert(!fchdir(wd_save)); + fchdir(wd_save); close(wd_save); } #endif -- cgit v1.2.3