From 7870f74c2178e55570d7c2270bb30105e0964e33 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/test/mruby_io_test.c') 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 18274e717a6a3565a0b8e81596d44bb72e7128f1 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/test/mruby_io_test.c') 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 462ff4cc8400ae757dceb807485c3736013a6965 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/test/mruby_io_test.c') 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 88b756b39ffb6ef43006b8648d87ecddfb13a214 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/test/mruby_io_test.c') 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 28b23b44ec8602870576cc1f45d8a59dba676c79 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/test/mruby_io_test.c') 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 0f229bfbbf4fe5a8b7faf802750bda60096b9409 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/test/mruby_io_test.c') 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 312411dea0f5c54bd8a2548ad37333fed7d1c6b9 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/test/mruby_io_test.c') 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 bb6290a5d581ffe9c663725374ad3e220996e26c 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/test/mruby_io_test.c') 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 e2ac2a82a5c344de3369a6f988ec40bb5510ab45 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/test/mruby_io_test.c') 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 From aeb86d953eaa95190491beb0fe168ada2e403f2f Mon Sep 17 00:00:00 2001 From: KOBAYASHI Shuji Date: Wed, 29 Apr 2020 17:21:04 +0900 Subject: Avoid changing directory in `mruby-io` test --- mrbgems/mruby-io/test/file.rb | 30 ++++---- mrbgems/mruby-io/test/mruby_io_test.c | 129 ++++++++++++---------------------- 2 files changed, 62 insertions(+), 97 deletions(-) (limited to 'mrbgems/mruby-io/test/mruby_io_test.c') diff --git a/mrbgems/mruby-io/test/file.rb b/mrbgems/mruby-io/test/file.rb index 03917ef09..ef4d7fcb1 100644 --- a/mrbgems/mruby-io/test/file.rb +++ b/mrbgems/mruby-io/test/file.rb @@ -110,18 +110,22 @@ assert('File.join') do end assert('File.realpath') do - if File::ALT_SEPARATOR - readme_path = File._getwd + File::ALT_SEPARATOR + "README.md" - assert_equal readme_path, File.realpath("README.md") - else - dir = MRubyIOTestUtil.mkdtemp("mruby-io-test.XXXXXX") - begin - dir1 = File.realpath($mrbtest_io_rfname) - dir2 = File.realpath("./#{dir}//./../#{$mrbtest_io_symlinkname}") - assert_equal dir1, dir2 - ensure - MRubyIOTestUtil.rmdir dir + dir = MRubyIOTestUtil.mkdtemp("mruby-io-test.XXXXXX") + begin + sep = File::ALT_SEPARATOR || File::SEPARATOR + relative_path = "#{File.basename(dir)}#{sep}realpath_test" + path = "#{File._getwd}#{sep}#{relative_path}" + File.open(path, "w"){} + assert_equal path, File.realpath(relative_path) + + unless MRubyIOTestUtil.win? + path1 = File.realpath($mrbtest_io_rfname) + path2 = File.realpath($mrbtest_io_symlinkname) + assert_equal path1, path2 end + ensure + File.delete path rescue nil + MRubyIOTestUtil.rmdir dir end assert_raise(ArgumentError) { File.realpath("TO\0DO") } @@ -129,7 +133,9 @@ end assert("File.readlink") do begin - assert_equal $mrbtest_io_rfname, File.readlink($mrbtest_io_symlinkname) + exp = File.basename($mrbtest_io_rfname) + act = File.readlink($mrbtest_io_symlinkname) + assert_equal exp, act rescue NotImplementedError => e skip e.message end diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index 4dce48c26..d4c8eb13c 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -54,6 +54,7 @@ mkdtemp(char *temp) #include #include #include + #include #endif #include @@ -66,88 +67,53 @@ mkdtemp(char *temp) #include "mruby/variable.h" #include -int wd_save; -int socket_available_p; - -#if !defined(_WIN32) && !defined(_WIN64) -static int mrb_io_socket_available() -{ - int fd, retval = 0; - struct sockaddr_un sun0; - char socketname[] = "tmp.mruby-io-socket-ok.XXXXXXXX"; - if (!(fd = mkstemp(socketname))) { - goto sock_test_out; - } - unlink(socketname); - close(fd); - fd = socket(AF_UNIX, SOCK_STREAM, 0); - if (fd == -1) { - goto sock_test_out; - } - sun0.sun_family = AF_UNIX; - strncpy(sun0.sun_path, socketname, sizeof(sun0.sun_path)); - if (bind(fd, (struct sockaddr *)&sun0, sizeof(sun0)) == 0) { - retval = 1; - } -sock_test_out: - unlink(socketname); - close(fd); - return retval; -} -#endif - static mrb_value mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) { - char rfname[] = "tmp.mruby-io-test-r.XXXXXXXX"; - char wfname[] = "tmp.mruby-io-test-w.XXXXXXXX"; - char symlinkname[] = "tmp.mruby-io-test-l.XXXXXXXX"; - char socketname[] = "tmp.mruby-io-test-s.XXXXXXXX"; +#define GVNAME(n) "$mrbtest_io_" #n "name" + enum {IDX_READ, IDX_WRITE, IDX_LINK, IDX_SOCKET, IDX_COUNT}; + const char *gvnames[] = {GVNAME(rf), GVNAME(wf), GVNAME(symlink), GVNAME(socket)}; + char *fnames[IDX_COUNT]; + int fds[IDX_COUNT]; char msg[] = "mruby io test\n"; mode_t mask; - int fd0, fd1; FILE *fp; - + int i; #if !defined(_WIN32) && !defined(_WIN64) - int fd2, fd3; struct sockaddr_un sun0; - - if(!(socket_available_p = mrb_io_socket_available())) { - char *tmpdir; - wd_save = open(".", O_DIRECTORY); - tmpdir = getenv("TMPDIR"); - if (tmpdir) chdir(tmpdir); - else chdir("/tmp"); - } #endif - mask = umask(077); - fd0 = mkstemp(rfname); - fd1 = mkstemp(wfname); - if (fd0 == -1 || fd1 == -1) { - mrb_raise(mrb, E_RUNTIME_ERROR, "can't create temporary file"); - return mrb_nil_value(); - } - close(fd0); - close(fd1); + mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_msg"), mrb_str_new_cstr(mrb, msg)); + mask = umask(077); + for (i = 0; i < IDX_COUNT; i++) { + mrb_value fname = mrb_str_new_capa(mrb, 0); #if !defined(_WIN32) && !defined(_WIN64) - fd2 = mkstemp(symlinkname); - fd3 = mkstemp(socketname); - if (fd2 == -1 || fd3 == -1) { - mrb_raise(mrb, E_RUNTIME_ERROR, "can't create temporary file"); - return mrb_nil_value(); - } + /* + * Workaround for not being able to bind a socket to some file systems + * (e.g. vboxsf, NFS). [#4981] + */ + char *tmpdir = getenv("TMPDIR"); + if (tmpdir && strlen(tmpdir) > 0) { + mrb_str_cat_cstr(mrb, fname, tmpdir); + if (*(RSTRING_END(fname)-1) != '/') mrb_str_cat_lit(mrb, fname, "/"); + } else { + mrb_str_cat_lit(mrb, fname, "/tmp/"); + } #endif + mrb_str_cat_cstr(mrb, fname, gvnames[i]+1); + mrb_str_cat_cstr(mrb, fname, ".XXXXXXXX"); + fnames[i] = RSTRING_PTR(fname); + fds[i] = mkstemp(fnames[i]); + if (fds[i] == -1) { + mrb_raise(mrb, E_RUNTIME_ERROR, "can't create temporary file"); + } + close(fds[i]); + mrb_gv_set(mrb, mrb_intern_cstr(mrb, gvnames[i]), fname); + } umask(mask); - mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_rfname"), mrb_str_new_cstr(mrb, rfname)); - mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_wfname"), mrb_str_new_cstr(mrb, wfname)); - mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_symlinkname"), mrb_str_new_cstr(mrb, symlinkname)); - mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_socketname"), mrb_str_new_cstr(mrb, socketname)); - mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_msg"), mrb_str_new_cstr(mrb, msg)); - - fp = fopen(rfname, "wb"); + fp = fopen(fnames[IDX_READ], "wb"); if (fp == NULL) { mrb_raise(mrb, E_RUNTIME_ERROR, "can't open temporary file"); return mrb_nil_value(); @@ -155,7 +121,7 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) fputs(msg, fp); fclose(fp); - fp = fopen(wfname, "wb"); + fp = fopen(fnames[IDX_WRITE], "wb"); if (fp == NULL) { mrb_raise(mrb, E_RUNTIME_ERROR, "can't open temporary file"); return mrb_nil_value(); @@ -163,29 +129,29 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) fclose(fp); #if !defined(_WIN32) && !defined(_WIN64) - unlink(symlinkname); - close(fd2); - if (symlink(rfname, symlinkname) == -1) { + unlink(fnames[IDX_LINK]); + if (symlink(basename(fnames[IDX_READ]), fnames[IDX_LINK]) == -1) { mrb_raise(mrb, E_RUNTIME_ERROR, "can't make a symbolic link"); } - unlink(socketname); - close(fd3); - fd3 = socket(AF_UNIX, SOCK_STREAM, 0); - if (fd3 == -1) { + unlink(fnames[IDX_SOCKET]); + fds[IDX_SOCKET] = socket(AF_UNIX, SOCK_STREAM, 0); + if (fds[IDX_SOCKET] == -1) { mrb_raise(mrb, E_RUNTIME_ERROR, "can't make a socket"); } sun0.sun_family = AF_UNIX; - strncpy(sun0.sun_path, socketname, sizeof(sun0.sun_path)); - if (bind(fd3, (struct sockaddr *)&sun0, sizeof(sun0)) == -1) { + strncpy(sun0.sun_path, fnames[IDX_SOCKET], sizeof(sun0.sun_path)-1); + sun0.sun_path[sizeof(sun0.sun_path)-1] = 0; + if (bind(fds[IDX_SOCKET], (struct sockaddr *)&sun0, sizeof(sun0)) == -1) { mrb_raisef(mrb, E_RUNTIME_ERROR, "can't bind AF_UNIX socket to %s: %d", sun0.sun_path, errno); } - close(fd3); + close(fds[IDX_SOCKET]); #endif return mrb_true_value(); +#undef GVNAME } static mrb_value @@ -215,13 +181,6 @@ 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) { - fchdir(wd_save); - close(wd_save); - } -#endif - return mrb_nil_value(); } -- 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/test/mruby_io_test.c') 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