diff options
| -rw-r--r-- | include/mruby.h | 1 | ||||
| -rw-r--r-- | mrbgems/mruby-io/test/file.rb | 9 | ||||
| -rw-r--r-- | mrbgems/mruby-io/test/io.rb | 10 | ||||
| -rw-r--r-- | mrbgems/mruby-io/test/mruby_io_test.c | 47 | ||||
| -rw-r--r-- | mrbgems/mruby-pack/src/pack.c | 12 | ||||
| -rw-r--r-- | mrbgems/mruby-socket/src/socket.c | 14 | ||||
| -rw-r--r-- | mrbgems/mruby-string-ext/mrblib/string.rb | 6 | ||||
| -rw-r--r-- | mrbgems/mruby-struct/src/struct.c | 2 | ||||
| -rw-r--r-- | mrblib/10error.rb | 3 | ||||
| -rw-r--r-- | mrblib/string.rb | 4 | ||||
| -rw-r--r-- | src/array.c | 2 | ||||
| -rw-r--r-- | src/class.c | 4 | ||||
| -rw-r--r-- | src/hash.c | 2 | ||||
| -rw-r--r-- | src/string.c | 2 | ||||
| -rw-r--r-- | src/variable.c | 2 |
15 files changed, 71 insertions, 49 deletions
diff --git a/include/mruby.h b/include/mruby.h index 5d51b2375..d93874dfa 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -1164,6 +1164,7 @@ MRB_API void mrb_print_error(mrb_state *mrb); #define E_SYNTAX_ERROR (mrb_exc_get(mrb, "SyntaxError")) #define E_LOCALJUMP_ERROR (mrb_exc_get(mrb, "LocalJumpError")) #define E_REGEXP_ERROR (mrb_exc_get(mrb, "RegexpError")) +#define E_FROZEN_ERROR (mrb_exc_get(mrb, "FrozenError")) #define E_NOTIMP_ERROR (mrb_exc_get(mrb, "NotImplementedError")) #ifndef MRB_WITHOUT_FLOAT diff --git a/mrbgems/mruby-io/test/file.rb b/mrbgems/mruby-io/test/file.rb index da3e2aa11..e5c127746 100644 --- a/mrbgems/mruby-io/test/file.rb +++ b/mrbgems/mruby-io/test/file.rb @@ -106,6 +106,7 @@ assert("File.readlink") do end assert("File.readlink fails with non-symlink") do + skip "readlink is not supported on this platform" if MRubyIOTestUtil.win? begin e2 = nil assert_raise(RuntimeError) { @@ -126,10 +127,6 @@ assert("File.readlink fails with non-symlink") do end end -assert('File TEST CLEANUP') do - assert_nil MRubyIOTestUtil.io_test_cleanup -end - assert('File.expand_path') do assert_equal "/", File.expand_path("..", "/tmp"), "parent path with base_dir (1)" assert_equal "/tmp", File.expand_path("..", "/tmp/mruby"), "parent path with base_dir (2)" @@ -194,3 +191,7 @@ assert('File.chmod') do File.delete('chmod-test') end end + +assert('File TEST CLEANUP') do + assert_nil MRubyIOTestUtil.io_test_cleanup +end diff --git a/mrbgems/mruby-io/test/io.rb b/mrbgems/mruby-io/test/io.rb index df646977a..9a6328ea4 100644 --- a/mrbgems/mruby-io/test/io.rb +++ b/mrbgems/mruby-io/test/io.rb @@ -23,6 +23,7 @@ end assert('IO TEST SETUP') do MRubyIOTestUtil.io_test_setup + $cr = MRubyIOTestUtil.win? ? 1 : 0 # "\n" include CR or not end assert('IO', '15.2.20') do @@ -141,6 +142,7 @@ assert('IO#read', '15.2.20.5.14') do end assert "IO#read(n) with n > IO::BUF_SIZE" do + skip "pipe is not supported on this platform" if MRubyIOTestUtil.win? r,w = IO.pipe n = IO::BUF_SIZE+1 w.write 'a'*n @@ -308,6 +310,7 @@ assert('IO#_read_buf') do end assert('IO#isatty') do + skip "isatty is not supported on this platform" if MRubyIOTestUtil.win? f1 = File.open("/dev/tty") f2 = File.open($mrbtest_io_rfname) @@ -370,7 +373,7 @@ assert('IO#gets') do fd = IO.sysopen $mrbtest_io_wfname, "w" io = IO.new fd, "w" io.write "0123456789" * 2 + "\na" - assert_equal 22, io.pos + assert_equal 22 + $cr, io.pos io.close assert_equal true, io.closed? @@ -381,7 +384,7 @@ assert('IO#gets') do # gets first line assert_equal "0123456789" * 2 + "\n", line, "gets first line" assert_equal 21, line.size - assert_equal 21, io.pos + assert_equal 21 + $cr, io.pos # gets second line assert_equal "a", io.gets, "gets second line" @@ -399,7 +402,7 @@ assert('IO#gets - paragraph mode') do io.write "0" * 10 + "\n" io.write "1" * 10 + "\n\n" io.write "2" * 10 + "\n" - assert_equal 34, io.pos + assert_equal 34 + $cr * 4, io.pos io.close assert_equal true, io.closed? @@ -516,6 +519,7 @@ assert('IO#close_on_exec') do # IO.sysopen opens a file descripter with O_CLOEXEC flag. assert_true io.close_on_exec? rescue ScriptError + io.close skip "IO\#close_on_exec is not implemented." end diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index 1b14b38d4..e0596e93d 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -18,19 +18,8 @@ typedef int mode_t; static int mkstemp(char *p) { - char *temp, *path; - int fd; - - temp = _strdup(p); - if (temp == NULL) return -1; - path = _mktemp(temp); - if (path[0] == 0) { - free(path); - return -1; - } - fd = _open(path, _O_CREAT|_O_BINARY|_O_RDWR|_O_TEMPORARY); - free(path); - return fd; + _mktemp(p); + return 0; } static char* @@ -63,30 +52,31 @@ mkdtemp(char *temp) static mrb_value mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) { - char rfname[] = "tmp.mruby-io-test.XXXXXXXX"; - char wfname[] = "tmp.mruby-io-test.XXXXXXXX"; + char rfname[] = "tmp.mruby-io-test-r.XXXXXXXX"; + char wfname[] = "tmp.mruby-io-test-w.XXXXXXXX"; char symlinkname[] = "tmp.mruby-io-test.XXXXXXXX"; char socketname[] = "/tmp/mruby-io-test.XXXXXXXX"; char msg[] = "mruby io test\n"; mode_t mask; - int fd0, fd1, fd2, fd3; + int fd0, fd1; FILE *fp; -#ifndef _WIN32 +#if !defined(_WIN32) && !defined(_WIN64) + int fd2, fd3; struct sockaddr_un sun0; #endif mask = umask(077); fd0 = mkstemp(rfname); fd1 = mkstemp(wfname); -#ifndef _WIN32 +#if !defined(_WIN32) && !defined(_WIN64) fd2 = mkstemp(symlinkname); fd3 = mkstemp(socketname); -#endif if (fd0 == -1 || fd1 == -1 || fd2 == -1 || fd3 == -1) { mrb_raise(mrb, E_RUNTIME_ERROR, "can't create temporary file"); return mrb_nil_value(); } +#endif umask(mask); mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_rfname"), mrb_str_new_cstr(mrb, rfname)); @@ -110,7 +100,7 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) } fclose(fp); -#ifndef _WIN32 +#if !defined(_WIN32) && !defined(_WIN64) unlink(symlinkname); close(fd2); if (symlink(rfname, symlinkname) == -1) { @@ -170,7 +160,7 @@ static mrb_value mrb_io_test_file_setup(mrb_state *mrb, mrb_value self) { mrb_value ary = mrb_io_test_io_setup(mrb, self); -#ifndef _WIN32 +#if !defined(_WIN32) && !defined(_WIN64) if (symlink("/usr/bin", "test-bin") == -1) { mrb_raise(mrb, E_RUNTIME_ERROR, "can't make a symbolic link"); } @@ -216,6 +206,20 @@ mrb_io_test_rmdir(mrb_state *mrb, mrb_value klass) return mrb_true_value(); } +mrb_value +mrb_io_win_p(mrb_state *mrb, mrb_value klass) +{ +#if defined(_WIN32) || defined(_WIN64) +# if defined(__CYGWIN__) || defined(__CYGWIN32__) + return mrb_false_value(); +# else + return mrb_true_value(); +# endif +#else + return mrb_false_value(); +#endif +} + void mrb_mruby_io_gem_test(mrb_state* mrb) { @@ -228,4 +232,5 @@ mrb_mruby_io_gem_test(mrb_state* mrb) mrb_define_class_method(mrb, io_test, "mkdtemp", mrb_io_test_mkdtemp, MRB_ARGS_REQ(1)); mrb_define_class_method(mrb, io_test, "rmdir", mrb_io_test_rmdir, MRB_ARGS_REQ(1)); + mrb_define_class_method(mrb, io_test, "win?", mrb_io_win_p, MRB_ARGS_NONE()); } diff --git a/mrbgems/mruby-pack/src/pack.c b/mrbgems/mruby-pack/src/pack.c index 4c43a2cf6..489ad3718 100644 --- a/mrbgems/mruby-pack/src/pack.c +++ b/mrbgems/mruby-pack/src/pack.c @@ -193,7 +193,9 @@ pack_l(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int fl static int unpack_l(mrb_state *mrb, const unsigned char *src, int srclen, mrb_value ary, unsigned int flags) { +#ifndef MRB_INT64 char msg[60]; +#endif uint32_t ul; mrb_int n; @@ -210,16 +212,20 @@ unpack_l(mrb_state *mrb, const unsigned char *src, int srclen, mrb_value ary, un } if (flags & PACK_FLAG_SIGNED) { int32_t sl = ul; +#ifndef MRB_INT64 if (!FIXABLE(sl)) { snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %ld", (long)sl); mrb_raise(mrb, E_RANGE_ERROR, msg); } +#endif n = sl; } else { +#ifndef MRB_INT64 if (!POSFIXABLE(ul)) { snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %lu", (unsigned long)ul); mrb_raise(mrb, E_RANGE_ERROR, msg); } +#endif n = ul; } mrb_ary_push(mrb, ary, mrb_fixnum_value(n)); @@ -591,7 +597,7 @@ unpack_a(mrb_state *mrb, const void *src, int slen, mrb_value ary, long count, u if (flags & PACK_FLAG_Z) { /* "Z" */ if ((cp = (const char *)memchr(sptr, '\0', slen)) != NULL) { - copylen = cp - sptr; + copylen = (int)(cp - sptr); if (count == -1) { slen = copylen + 1; } @@ -859,8 +865,8 @@ has_tmpl(const struct tmpl *tmpl) static void read_tmpl(mrb_state *mrb, struct tmpl *tmpl, int *dirp, int *typep, int *sizep, int *countp, unsigned int *flagsp) { - mrb_int ch, t, tlen; - int dir, type, size = 0; + mrb_int t, tlen; + int ch, dir, type, size = 0; int count = 1; unsigned int flags = 0; const char *tptr; diff --git a/mrbgems/mruby-socket/src/socket.c b/mrbgems/mruby-socket/src/socket.c index 973425312..0b0835f56 100644 --- a/mrbgems/mruby-socket/src/socket.c +++ b/mrbgems/mruby-socket/src/socket.c @@ -15,6 +15,7 @@ #ifndef _SSIZE_T_DEFINED typedef int ssize_t; #endif + typedef int fsize_t; #else #include <sys/types.h> #include <sys/socket.h> @@ -25,6 +26,7 @@ #include <fcntl.h> #include <netdb.h> #include <unistd.h> + typedef size_t fsize_t; #endif #include <stddef.h> @@ -339,7 +341,7 @@ mrb_basicsocket_recv(mrb_state *mrb, mrb_value self) mrb_get_args(mrb, "i|i", &maxlen, &flags); buf = mrb_str_buf_new(mrb, maxlen); - n = recv(socket_fd(mrb, self), RSTRING_PTR(buf), (size_t)maxlen, (int)flags); + n = recv(socket_fd(mrb, self), RSTRING_PTR(buf), (fsize_t)maxlen, (int)flags); if (n == -1) mrb_sys_fail(mrb, "recv"); mrb_str_resize(mrb, buf, (mrb_int)n); @@ -358,7 +360,7 @@ mrb_basicsocket_recvfrom(mrb_state *mrb, mrb_value self) buf = mrb_str_buf_new(mrb, maxlen); socklen = sizeof(struct sockaddr_storage); sa = mrb_str_buf_new(mrb, socklen); - n = recvfrom(socket_fd(mrb, self), RSTRING_PTR(buf), (size_t)maxlen, (int)flags, (struct sockaddr *)RSTRING_PTR(sa), &socklen); + n = recvfrom(socket_fd(mrb, self), RSTRING_PTR(buf), (fsize_t)maxlen, (int)flags, (struct sockaddr *)RSTRING_PTR(sa), &socklen); if (n == -1) mrb_sys_fail(mrb, "recvfrom"); mrb_str_resize(mrb, buf, (mrb_int)n); @@ -379,9 +381,9 @@ mrb_basicsocket_send(mrb_state *mrb, mrb_value self) dest = mrb_nil_value(); mrb_get_args(mrb, "Si|S", &mesg, &flags, &dest); if (mrb_nil_p(dest)) { - n = send(socket_fd(mrb, self), RSTRING_PTR(mesg), (size_t)RSTRING_LEN(mesg), (int)flags); + n = send(socket_fd(mrb, self), RSTRING_PTR(mesg), (fsize_t)RSTRING_LEN(mesg), (int)flags); } else { - n = sendto(socket_fd(mrb, self), RSTRING_PTR(mesg), (size_t)RSTRING_LEN(mesg), (int)flags, (const struct sockaddr*)RSTRING_PTR(dest), RSTRING_LEN(dest)); + n = sendto(socket_fd(mrb, self), RSTRING_PTR(mesg), (fsize_t)RSTRING_LEN(mesg), (int)flags, (const struct sockaddr*)RSTRING_PTR(dest), (fsize_t)RSTRING_LEN(dest)); } if (n == -1) mrb_sys_fail(mrb, "send"); @@ -532,7 +534,7 @@ mrb_ipsocket_recvfrom(mrb_state *mrb, mrb_value self) mrb_get_args(mrb, "i|i", &maxlen, &flags); buf = mrb_str_buf_new(mrb, maxlen); socklen = sizeof(ss); - n = recvfrom(fd, RSTRING_PTR(buf), (size_t)maxlen, (int)flags, + n = recvfrom(fd, RSTRING_PTR(buf), (fsize_t)maxlen, (int)flags, (struct sockaddr *)&ss, &socklen); if (n == -1) { mrb_sys_fail(mrb, "recvfrom"); @@ -557,7 +559,7 @@ mrb_socket_gethostname(mrb_state *mrb, mrb_value cls) bufsize = 256; #endif buf = mrb_str_buf_new(mrb, (mrb_int)bufsize); - if (gethostname(RSTRING_PTR(buf), bufsize) != 0) + if (gethostname(RSTRING_PTR(buf), (fsize_t)bufsize) != 0) mrb_sys_fail(mrb, "gethostname"); mrb_str_resize(mrb, buf, (mrb_int)strlen(RSTRING_PTR(buf))); return buf; diff --git a/mrbgems/mruby-string-ext/mrblib/string.rb b/mrbgems/mruby-string-ext/mrblib/string.rb index cb36d9a48..0da84daed 100644 --- a/mrbgems/mruby-string-ext/mrblib/string.rb +++ b/mrbgems/mruby-string-ext/mrblib/string.rb @@ -95,7 +95,7 @@ class String # "hello".lstrip! #=> nil # def lstrip! - raise RuntimeError, "can't modify frozen String" if frozen? + raise FrozenError, "can't modify frozen String" if frozen? s = self.lstrip (s == self) ? nil : self.replace(s) end @@ -125,7 +125,7 @@ class String # <code>nil</code> if <i>str</i> was not altered. # def strip! - raise RuntimeError, "can't modify frozen String" if frozen? + raise FrozenError, "can't modify frozen String" if frozen? s = self.strip (s == self) ? nil : self.replace(s) end @@ -199,7 +199,7 @@ class String # string #=> "thsa sting" # def slice!(arg1, arg2=nil) - raise RuntimeError, "can't modify frozen String" if frozen? + raise FrozenError, "can't modify frozen String" if frozen? raise "wrong number of arguments (for 1..2)" if arg1.nil? && arg2.nil? if !arg1.nil? && !arg2.nil? diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c index 8de4b6c52..adeb09bc1 100644 --- a/mrbgems/mruby-struct/src/struct.c +++ b/mrbgems/mruby-struct/src/struct.c @@ -89,7 +89,7 @@ static void mrb_struct_modify(mrb_state *mrb, mrb_value strct) { if (MRB_FROZEN_P(mrb_basic_ptr(strct))) { - mrb_raise(mrb, E_RUNTIME_ERROR, "can't modify frozen struct"); + mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen struct"); } mrb_write_barrier(mrb, mrb_basic_ptr(strct)); diff --git a/mrblib/10error.rb b/mrblib/10error.rb index 22a8d1ad7..0d9f38d58 100644 --- a/mrblib/10error.rb +++ b/mrblib/10error.rb @@ -51,6 +51,9 @@ end class NotImplementedError < ScriptError end +class FrozenError < RuntimeError +end + class StopIteration < IndexError attr_accessor :result end diff --git a/mrblib/string.rb b/mrblib/string.rb index 4c6114ecb..ee98cfa0c 100644 --- a/mrblib/string.rb +++ b/mrblib/string.rb @@ -96,7 +96,7 @@ class String # # ISO 15.2.10.5.19 def gsub!(*args, &block) - raise RuntimeError, "can't modify frozen String" if frozen? + raise FrozenError, "can't modify frozen String" if frozen? return to_enum(:gsub!, *args) if args.length == 1 && !block str = self.gsub(*args, &block) return nil if str == self @@ -159,7 +159,7 @@ class String # # ISO 15.2.10.5.37 def sub!(*args, &block) - raise RuntimeError, "can't modify frozen String" if frozen? + raise FrozenError, "can't modify frozen String" if frozen? str = self.sub(*args, &block) return nil if str == self self.replace(str) diff --git a/src/array.c b/src/array.c index 47a582ffc..285e48a0f 100644 --- a/src/array.c +++ b/src/array.c @@ -114,7 +114,7 @@ static void ary_modify_check(mrb_state *mrb, struct RArray *a) { if (MRB_FROZEN_P(a)) { - mrb_raise(mrb, E_RUNTIME_ERROR, "can't modify frozen array"); + mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen array"); } } diff --git a/src/class.c b/src/class.c index 986af5531..9cb2a9a3a 100644 --- a/src/class.c +++ b/src/class.c @@ -430,9 +430,9 @@ mrb_define_method_raw(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_method_ if (MRB_FROZEN_P(c)) { if (c->tt == MRB_TT_MODULE) - mrb_raise(mrb, E_RUNTIME_ERROR, "can't modify frozen module"); + mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen module"); else - mrb_raise(mrb, E_RUNTIME_ERROR, "can't modify frozen class"); + mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen class"); } if (!h) h = c->mt = kh_init(mt, mrb); k = kh_put(mt, mrb, h, mid); diff --git a/src/hash.c b/src/hash.c index feb06d843..d58706954 100644 --- a/src/hash.c +++ b/src/hash.c @@ -286,7 +286,7 @@ static void mrb_hash_modify(mrb_state *mrb, mrb_value hash) { if (MRB_FROZEN_P(mrb_hash_ptr(hash))) { - mrb_raise(mrb, E_RUNTIME_ERROR, "can't modify frozen hash"); + mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen hash"); } mrb_hash_tbl(mrb, hash); } diff --git a/src/string.c b/src/string.c index da475839c..d4dc517cf 100644 --- a/src/string.c +++ b/src/string.c @@ -494,7 +494,7 @@ static void check_frozen(mrb_state *mrb, struct RString *s) { if (MRB_FROZEN_P(s)) { - mrb_raise(mrb, E_RUNTIME_ERROR, "can't modify frozen string"); + mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen string"); } } diff --git a/src/variable.c b/src/variable.c index f0bfa19cc..968fc2fc1 100644 --- a/src/variable.c +++ b/src/variable.c @@ -261,7 +261,7 @@ mrb_obj_iv_set(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v) iv_tbl *t = obj->iv; if (MRB_FROZEN_P(obj)) { - mrb_raisef(mrb, E_RUNTIME_ERROR, "can't modify frozen %S", mrb_obj_value(obj)); + mrb_raisef(mrb, E_FROZEN_ERROR, "can't modify frozen %S", mrb_obj_value(obj)); } if (!t) { t = obj->iv = iv_new(mrb); |
