From b6c71e4c68e336574e4bb29954545f31e8702df7 Mon Sep 17 00:00:00 2001 From: Tomoyuki Sahara Date: Tue, 12 Mar 2013 00:21:04 -0700 Subject: [PATCH 01/14] Initial commit --- README.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 000000000..e76cddb82 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +mruby-errno +=========== + +Errno module for mruby \ No newline at end of file From e56d53e354b6eda96427f13563199e7a076d7983 Mon Sep 17 00:00:00 2001 From: Tomoyuki Sahara Date: Wed, 13 Mar 2013 10:00:22 +0900 Subject: [PATCH 02/14] Errno module for mruby. --- README.md | 25 +- mrbgem.rake | 6 + src/errno.c | 163 +++++++++ src/gen.rb | 25 ++ src/known_errors.def | 145 ++++++++ src/known_errors_def.cstub | 725 +++++++++++++++++++++++++++++++++++++ src/known_errors_e2c.cstub | 435 ++++++++++++++++++++++ test/errno.rb | 60 +++ 8 files changed, 1583 insertions(+), 1 deletion(-) create mode 100644 mrbgem.rake create mode 100644 src/errno.c create mode 100755 src/gen.rb create mode 100644 src/known_errors.def create mode 100644 src/known_errors_def.cstub create mode 100644 src/known_errors_e2c.cstub create mode 100644 test/errno.rb diff --git a/README.md b/README.md index e76cddb82..e3c594cb5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,27 @@ mruby-errno =========== -Errno module for mruby \ No newline at end of file +Errno module for mruby + + +## License + +Copyright (c) 2013 Internet Initiative Japan Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/mrbgem.rake b/mrbgem.rake new file mode 100644 index 000000000..ba3d60dae --- /dev/null +++ b/mrbgem.rake @@ -0,0 +1,6 @@ +MRuby::Gem::Specification.new('mruby-errno') do |spec| + spec.license = 'MIT' + spec.authors = 'Internet Initiative Japan Inc.' + + spec.cc.include_paths << "#{build.root}/src" +end diff --git a/src/errno.c b/src/errno.c new file mode 100644 index 000000000..3c7d06693 --- /dev/null +++ b/src/errno.c @@ -0,0 +1,163 @@ +#include "mruby.h" +#include "mruby/array.h" +#include "mruby/class.h" +#include "mruby/hash.h" +#include "mruby/numeric.h" +#include "mruby/string.h" +#include "mruby/variable.h" +#include +#include +#include + +static mrb_value +mrb_sce_init(mrb_state *mrb, mrb_value self) +{ + mrb_value c, e2c, m, str; + mrb_int n; + int argc, no_errno = 0; + char buf[20]; + + argc = mrb_get_args(mrb, "o|i", &m, &n); + if (argc == 1) { + if (mrb_type(m) == MRB_TT_FIXNUM) { + n = mrb_fixnum(m); + m = mrb_nil_value(); + } else { + no_errno = 1; + } + } + if (!no_errno) { + e2c = mrb_const_get(mrb, mrb_obj_value(mrb_class_get(mrb, "Errno")), mrb_intern(mrb, "Errno2class")); + c = mrb_hash_fetch(mrb, e2c, mrb_fixnum_value(n), mrb_nil_value()); + if (!mrb_nil_p(c)) { + mrb_basic(self)->c = mrb_class_ptr(c); + str = mrb_str_new2(mrb, strerror(n)); + } else { + mrb_iv_set(mrb, self, mrb_intern(mrb, "errno"), mrb_fixnum_value(n)); + str = mrb_str_new2(mrb, "Unknown error: "); + snprintf(buf, sizeof(buf), "%d", n); + mrb_str_cat2(mrb, str, buf); + } + } else { + str = mrb_str_new2(mrb, "unknown error"); + } + if (!mrb_nil_p(m)) { + mrb_str_cat2(mrb, str, " - "); + mrb_str_append(mrb, str, m); + } + mrb_iv_set(mrb, self, mrb_intern(mrb, "mesg"), str); + return self; +} + +static mrb_value +mrb_sce_errno(mrb_state *mrb, mrb_value self) +{ + mrb_sym sym; + mrb_value klass; + + klass = mrb_obj_value(mrb_class(mrb, self)); + sym = mrb_intern(mrb, "Errno"); + if (mrb_const_defined(mrb, klass, sym)) + return mrb_const_get(mrb, klass, sym); + else { + sym = mrb_intern(mrb, "errno"); + return mrb_attr_get(mrb, self, sym); + } +} + +static mrb_value +mrb_sce_to_s(mrb_state *mrb, mrb_value self) +{ + return mrb_attr_get(mrb, self, mrb_intern(mrb, "mesg")); +} + +static mrb_value +mrb_sce_sys_fail(mrb_state *mrb, mrb_value cls) +{ + struct RClass *cl, *sce; + mrb_value e, msg; + mrb_int no; + int argc; + char name[8]; + + sce = mrb_class_obj_get(mrb, "SystemCallError"); + argc = mrb_get_args(mrb, "i|S", &no, &msg); + if (argc == 1) { + e = mrb_funcall(mrb, mrb_obj_value(sce), "new", 1, mrb_fixnum_value(no)); + } else { + e = mrb_funcall(mrb, mrb_obj_value(sce), "new", 2, msg, mrb_fixnum_value(no)); + } + if (mrb_obj_class(mrb, e) == sce) { + snprintf(name, sizeof(name), "E%03ld", (long)no); + cl = mrb_define_class_under(mrb, mrb_class_get(mrb, "Errno"), name, sce); + mrb_define_const(mrb, cl, "Errno", mrb_fixnum_value(no)); + mrb_basic(e)->c = cl; + } + mrb_exc_raise(mrb, e); + return mrb_nil_value(); /* NOTREACHED */ +} + +static mrb_value +mrb_exxx_init(mrb_state *mrb, mrb_value self) +{ + mrb_value m, no, str; + + no = mrb_const_get(mrb, mrb_obj_value(mrb_class(mrb, self)), mrb_intern(mrb, "Errno")); + str = mrb_str_new2(mrb, strerror(mrb_fixnum(no))); + + m = mrb_nil_value(); + mrb_get_args(mrb, "|S", &m); + if (!mrb_nil_p(m)) { + mrb_str_cat2(mrb, str, " - "); + mrb_str_append(mrb, str, m); + } + mrb_iv_set(mrb, self, mrb_intern(mrb, "mesg"), str); + return self; +} + +void +mrb_mruby_errno_gem_init(mrb_state *mrb) +{ + struct RClass *e, *eno, *sce, *ste; + mrb_value h, noerror; + + ste = mrb_class_obj_get(mrb, "StandardError"); + + sce = mrb_define_class(mrb, "SystemCallError", ste); + mrb_define_class_method(mrb, sce, "_sys_fail", mrb_sce_sys_fail, ARGS_REQ(1)); + mrb_define_method(mrb, sce, "errno", mrb_sce_errno, ARGS_NONE()); + mrb_define_method(mrb, sce, "to_s", mrb_sce_to_s, ARGS_NONE()); + mrb_define_method(mrb, sce, "initialize", mrb_sce_init, ARGS_REQ(1)|ARGS_OPT(1)); + + eno = mrb_define_module(mrb, "Errno"); + h = mrb_hash_new(mrb); + mrb_define_const(mrb, eno, "Errno2class", h); + + e = mrb_define_class_under(mrb, eno, "NOERROR", sce); + mrb_define_const(mrb, e, "Errno", mrb_fixnum_value(0)); + mrb_define_method(mrb, e, "initialize", mrb_exxx_init, ARGS_OPT(1)); + //mrb_define_method(mrb, e, "===", mrb_exxx_cmp, ARGS_REQ(1)); + noerror = mrb_obj_value(e); + +#define itsdefined(SYM) \ + do { \ + int ai = mrb_gc_arena_save(mrb); \ + e = mrb_define_class_under(mrb, eno, #SYM, sce); \ + mrb_define_const(mrb, e, "Errno", mrb_fixnum_value(SYM)); \ + mrb_define_method(mrb, e, "initialize", mrb_exxx_init, ARGS_OPT(1)); \ + mrb_hash_set(mrb, h, mrb_fixnum_value(SYM), mrb_obj_value(e)); \ + mrb_gc_arena_restore(mrb, ai); \ + } while (0) + +#define itsnotdefined(SYM) \ + do { \ + mrb_define_const(mrb, eno, #SYM, noerror); \ + } while (0) + +#include "known_errors_def.cstub" +} + +void +mrb_mruby_errno_gem_final(mrb_state *mrb) +{ +} diff --git a/src/gen.rb b/src/gen.rb new file mode 100755 index 000000000..12e6b302e --- /dev/null +++ b/src/gen.rb @@ -0,0 +1,25 @@ +#!/usr/bin/env ruby + +Dir.chdir(File.dirname($0)) + +e = File.open("known_errors_e2c.cstub", "w") +d = File.open("known_errors_def.cstub", "w") + +IO.readlines("known_errors.def").each { |name| + next if name =~ /^#/ + name.strip! + + e.write < Date: Tue, 9 Apr 2013 15:47:12 +0900 Subject: [PATCH 03/14] mrb_str_new2 -> mrb_str_new_cstr --- src/errno.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/errno.c b/src/errno.c index 3c7d06693..4fcfb2b29 100644 --- a/src/errno.c +++ b/src/errno.c @@ -31,15 +31,15 @@ mrb_sce_init(mrb_state *mrb, mrb_value self) c = mrb_hash_fetch(mrb, e2c, mrb_fixnum_value(n), mrb_nil_value()); if (!mrb_nil_p(c)) { mrb_basic(self)->c = mrb_class_ptr(c); - str = mrb_str_new2(mrb, strerror(n)); + str = mrb_str_new_cstr(mrb, strerror(n)); } else { mrb_iv_set(mrb, self, mrb_intern(mrb, "errno"), mrb_fixnum_value(n)); - str = mrb_str_new2(mrb, "Unknown error: "); + str = mrb_str_new_cstr(mrb, "Unknown error: "); snprintf(buf, sizeof(buf), "%d", n); mrb_str_cat2(mrb, str, buf); } } else { - str = mrb_str_new2(mrb, "unknown error"); + str = mrb_str_new_cstr(mrb, "unknown error"); } if (!mrb_nil_p(m)) { mrb_str_cat2(mrb, str, " - "); @@ -103,7 +103,7 @@ mrb_exxx_init(mrb_state *mrb, mrb_value self) mrb_value m, no, str; no = mrb_const_get(mrb, mrb_obj_value(mrb_class(mrb, self)), mrb_intern(mrb, "Errno")); - str = mrb_str_new2(mrb, strerror(mrb_fixnum(no))); + str = mrb_str_new_cstr(mrb, strerror(mrb_fixnum(no))); m = mrb_nil_value(); mrb_get_args(mrb, "|S", &m); From 5903e2f3bff6900ec5a0b295d605dcc1e4c95812 Mon Sep 17 00:00:00 2001 From: Akira Yumiyama Date: Thu, 2 May 2013 23:56:52 +0900 Subject: [PATCH 04/14] rename mrb_class_obj_get -> mrb_class_get --- src/errno.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/errno.c b/src/errno.c index 4fcfb2b29..aea5db47d 100644 --- a/src/errno.c +++ b/src/errno.c @@ -80,7 +80,7 @@ mrb_sce_sys_fail(mrb_state *mrb, mrb_value cls) int argc; char name[8]; - sce = mrb_class_obj_get(mrb, "SystemCallError"); + sce = mrb_class_get(mrb, "SystemCallError"); argc = mrb_get_args(mrb, "i|S", &no, &msg); if (argc == 1) { e = mrb_funcall(mrb, mrb_obj_value(sce), "new", 1, mrb_fixnum_value(no)); @@ -121,7 +121,7 @@ mrb_mruby_errno_gem_init(mrb_state *mrb) struct RClass *e, *eno, *sce, *ste; mrb_value h, noerror; - ste = mrb_class_obj_get(mrb, "StandardError"); + ste = mrb_class_get(mrb, "StandardError"); sce = mrb_define_class(mrb, "SystemCallError", ste); mrb_define_class_method(mrb, sce, "_sys_fail", mrb_sce_sys_fail, ARGS_REQ(1)); From 838e4f975dea38a1493cba601be7bba83e64da15 Mon Sep 17 00:00:00 2001 From: Akira Yumiyama Date: Thu, 2 May 2013 23:57:20 +0900 Subject: [PATCH 05/14] add run_test.rb, .gitignore --- .gitignore | 1 + run_test.rb | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 .gitignore create mode 100644 run_test.rb diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..ceeb05b41 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/tmp diff --git a/run_test.rb b/run_test.rb new file mode 100644 index 000000000..d9566a2a6 --- /dev/null +++ b/run_test.rb @@ -0,0 +1,26 @@ +#!/usr/bin/env ruby +# +# mrbgems test runner +# + +gemname = File.basename(File.dirname(File.expand_path __FILE__)) + +if __FILE__ == $0 + repository, dir = 'https://github.com/mruby/mruby.git', 'tmp/mruby' + build_args = ARGV + build_args = ['all', 'test'] if build_args.nil? or build_args.empty? + + Dir.mkdir 'tmp' unless File.exist?('tmp') + unless File.exist?(dir) + system "git clone #{repository} #{dir}" + end + + exit system(%Q[cd #{dir}; MRUBY_CONFIG=#{File.expand_path __FILE__} ruby minirake #{build_args.join(' ')}]) +end + +MRuby::Build.new do |conf| + toolchain :gcc + conf.gembox 'default' + + conf.gem File.expand_path(File.dirname(__FILE__)) +end From 487ab66ea0e88d8156ee57eee8f6738db8d529a6 Mon Sep 17 00:00:00 2001 From: Tomoyuki Sahara Date: Wed, 21 Aug 2013 09:23:56 +0900 Subject: [PATCH 06/14] ARGS_XXX macros was renamed to MRG_ARGS_XXX. --- src/errno.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/errno.c b/src/errno.c index aea5db47d..17bb460c9 100644 --- a/src/errno.c +++ b/src/errno.c @@ -124,10 +124,10 @@ mrb_mruby_errno_gem_init(mrb_state *mrb) ste = mrb_class_get(mrb, "StandardError"); sce = mrb_define_class(mrb, "SystemCallError", ste); - mrb_define_class_method(mrb, sce, "_sys_fail", mrb_sce_sys_fail, ARGS_REQ(1)); - mrb_define_method(mrb, sce, "errno", mrb_sce_errno, ARGS_NONE()); - mrb_define_method(mrb, sce, "to_s", mrb_sce_to_s, ARGS_NONE()); - mrb_define_method(mrb, sce, "initialize", mrb_sce_init, ARGS_REQ(1)|ARGS_OPT(1)); + mrb_define_class_method(mrb, sce, "_sys_fail", mrb_sce_sys_fail, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, sce, "errno", mrb_sce_errno, MRB_ARGS_NONE()); + mrb_define_method(mrb, sce, "to_s", mrb_sce_to_s, MRB_ARGS_NONE()); + mrb_define_method(mrb, sce, "initialize", mrb_sce_init, MRB_ARGS_ARG(1, 1)); eno = mrb_define_module(mrb, "Errno"); h = mrb_hash_new(mrb); @@ -135,8 +135,8 @@ mrb_mruby_errno_gem_init(mrb_state *mrb) e = mrb_define_class_under(mrb, eno, "NOERROR", sce); mrb_define_const(mrb, e, "Errno", mrb_fixnum_value(0)); - mrb_define_method(mrb, e, "initialize", mrb_exxx_init, ARGS_OPT(1)); - //mrb_define_method(mrb, e, "===", mrb_exxx_cmp, ARGS_REQ(1)); + mrb_define_method(mrb, e, "initialize", mrb_exxx_init, MRB_ARGS_OPT(1)); + //mrb_define_method(mrb, e, "===", mrb_exxx_cmp, MRB_ARGS_REQ(1)); noerror = mrb_obj_value(e); #define itsdefined(SYM) \ @@ -144,7 +144,7 @@ mrb_mruby_errno_gem_init(mrb_state *mrb) int ai = mrb_gc_arena_save(mrb); \ e = mrb_define_class_under(mrb, eno, #SYM, sce); \ mrb_define_const(mrb, e, "Errno", mrb_fixnum_value(SYM)); \ - mrb_define_method(mrb, e, "initialize", mrb_exxx_init, ARGS_OPT(1)); \ + mrb_define_method(mrb, e, "initialize", mrb_exxx_init, MRB_ARGS_OPT(1)); \ mrb_hash_set(mrb, h, mrb_fixnum_value(SYM), mrb_obj_value(e)); \ mrb_gc_arena_restore(mrb, ai); \ } while (0) From 09d51f46a7a73a8f8de57453363ad6d2f1c3b2a0 Mon Sep 17 00:00:00 2001 From: Tomoyuki Sahara Date: Tue, 3 Dec 2013 10:06:32 +0900 Subject: [PATCH 07/14] mrb_intern API change. --- src/errno.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/errno.c b/src/errno.c index 17bb460c9..56bd20333 100644 --- a/src/errno.c +++ b/src/errno.c @@ -27,13 +27,13 @@ mrb_sce_init(mrb_state *mrb, mrb_value self) } } if (!no_errno) { - e2c = mrb_const_get(mrb, mrb_obj_value(mrb_class_get(mrb, "Errno")), mrb_intern(mrb, "Errno2class")); + e2c = mrb_const_get(mrb, mrb_obj_value(mrb_class_get(mrb, "Errno")), mrb_intern_lit(mrb, "Errno2class")); c = mrb_hash_fetch(mrb, e2c, mrb_fixnum_value(n), mrb_nil_value()); if (!mrb_nil_p(c)) { mrb_basic(self)->c = mrb_class_ptr(c); str = mrb_str_new_cstr(mrb, strerror(n)); } else { - mrb_iv_set(mrb, self, mrb_intern(mrb, "errno"), mrb_fixnum_value(n)); + mrb_iv_set(mrb, self, mrb_intern_lit(mrb, "errno"), mrb_fixnum_value(n)); str = mrb_str_new_cstr(mrb, "Unknown error: "); snprintf(buf, sizeof(buf), "%d", n); mrb_str_cat2(mrb, str, buf); @@ -45,7 +45,7 @@ mrb_sce_init(mrb_state *mrb, mrb_value self) mrb_str_cat2(mrb, str, " - "); mrb_str_append(mrb, str, m); } - mrb_iv_set(mrb, self, mrb_intern(mrb, "mesg"), str); + mrb_iv_set(mrb, self, mrb_intern_lit(mrb, "mesg"), str); return self; } @@ -56,11 +56,11 @@ mrb_sce_errno(mrb_state *mrb, mrb_value self) mrb_value klass; klass = mrb_obj_value(mrb_class(mrb, self)); - sym = mrb_intern(mrb, "Errno"); + sym = mrb_intern_lit(mrb, "Errno"); if (mrb_const_defined(mrb, klass, sym)) return mrb_const_get(mrb, klass, sym); else { - sym = mrb_intern(mrb, "errno"); + sym = mrb_intern_lit(mrb, "errno"); return mrb_attr_get(mrb, self, sym); } } @@ -68,7 +68,7 @@ mrb_sce_errno(mrb_state *mrb, mrb_value self) static mrb_value mrb_sce_to_s(mrb_state *mrb, mrb_value self) { - return mrb_attr_get(mrb, self, mrb_intern(mrb, "mesg")); + return mrb_attr_get(mrb, self, mrb_intern_lit(mrb, "mesg")); } static mrb_value @@ -102,7 +102,7 @@ mrb_exxx_init(mrb_state *mrb, mrb_value self) { mrb_value m, no, str; - no = mrb_const_get(mrb, mrb_obj_value(mrb_class(mrb, self)), mrb_intern(mrb, "Errno")); + no = mrb_const_get(mrb, mrb_obj_value(mrb_class(mrb, self)), mrb_intern_lit(mrb, "Errno")); str = mrb_str_new_cstr(mrb, strerror(mrb_fixnum(no))); m = mrb_nil_value(); @@ -111,7 +111,7 @@ mrb_exxx_init(mrb_state *mrb, mrb_value self) mrb_str_cat2(mrb, str, " - "); mrb_str_append(mrb, str, m); } - mrb_iv_set(mrb, self, mrb_intern(mrb, "mesg"), str); + mrb_iv_set(mrb, self, mrb_intern_lit(mrb, "mesg"), str); return self; } From c0abfaf69d91abcb798311ea490dec7109603a46 Mon Sep 17 00:00:00 2001 From: Tomoyuki Sahara Date: Thu, 13 Feb 2014 16:32:52 +0900 Subject: [PATCH 08/14] catch up with mrb_class_get API change. --- src/errno.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/errno.c b/src/errno.c index 56bd20333..bdaedf2dc 100644 --- a/src/errno.c +++ b/src/errno.c @@ -9,6 +9,14 @@ #include #include +#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 mrb_value mrb_sce_init(mrb_state *mrb, mrb_value self) { @@ -27,7 +35,7 @@ mrb_sce_init(mrb_state *mrb, mrb_value self) } } if (!no_errno) { - e2c = mrb_const_get(mrb, mrb_obj_value(mrb_class_get(mrb, "Errno")), mrb_intern_lit(mrb, "Errno2class")); + e2c = mrb_const_get(mrb, mrb_obj_value(mrb_module_get(mrb, "Errno")), mrb_intern_lit(mrb, "Errno2class")); c = mrb_hash_fetch(mrb, e2c, mrb_fixnum_value(n), mrb_nil_value()); if (!mrb_nil_p(c)) { mrb_basic(self)->c = mrb_class_ptr(c); @@ -89,7 +97,7 @@ mrb_sce_sys_fail(mrb_state *mrb, mrb_value cls) } if (mrb_obj_class(mrb, e) == sce) { snprintf(name, sizeof(name), "E%03ld", (long)no); - cl = mrb_define_class_under(mrb, mrb_class_get(mrb, "Errno"), name, sce); + cl = mrb_define_class_under(mrb, mrb_module_get(mrb, "Errno"), name, sce); mrb_define_const(mrb, cl, "Errno", mrb_fixnum_value(no)); mrb_basic(e)->c = cl; } From 06b4dd56a4f35d4f78a4d244b53da18851d53e05 Mon Sep 17 00:00:00 2001 From: Akira Yumiyama Date: Fri, 4 Apr 2014 11:24:52 +0900 Subject: [PATCH 09/14] Create .travis.yml --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..09fa3368f --- /dev/null +++ b/.travis.yml @@ -0,0 +1,2 @@ +script: + - "ruby run_test.rb" From 536e83614dd250024572e2cea8bbb48a67d62717 Mon Sep 17 00:00:00 2001 From: Akira Yumiyama Date: Fri, 4 Apr 2014 11:31:28 +0900 Subject: [PATCH 10/14] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 09fa3368f..ffe227284 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,2 +1,2 @@ script: - - "ruby run_test.rb" + - "ruby run_test.rb all test" From baba54fb4950252d04f4ab7d6169f21b104261ef Mon Sep 17 00:00:00 2001 From: cremno Date: Fri, 29 Aug 2014 16:41:11 +0200 Subject: [PATCH 11/14] use mrb_basic_ptr instead of obsolete mrb_basic --- src/errno.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/errno.c b/src/errno.c index bdaedf2dc..9524bb52f 100644 --- a/src/errno.c +++ b/src/errno.c @@ -38,7 +38,7 @@ mrb_sce_init(mrb_state *mrb, mrb_value self) e2c = mrb_const_get(mrb, mrb_obj_value(mrb_module_get(mrb, "Errno")), mrb_intern_lit(mrb, "Errno2class")); c = mrb_hash_fetch(mrb, e2c, mrb_fixnum_value(n), mrb_nil_value()); if (!mrb_nil_p(c)) { - mrb_basic(self)->c = mrb_class_ptr(c); + mrb_basic_ptr(self)->c = mrb_class_ptr(c); str = mrb_str_new_cstr(mrb, strerror(n)); } else { mrb_iv_set(mrb, self, mrb_intern_lit(mrb, "errno"), mrb_fixnum_value(n)); @@ -99,7 +99,7 @@ mrb_sce_sys_fail(mrb_state *mrb, mrb_value cls) snprintf(name, sizeof(name), "E%03ld", (long)no); cl = mrb_define_class_under(mrb, mrb_module_get(mrb, "Errno"), name, sce); mrb_define_const(mrb, cl, "Errno", mrb_fixnum_value(no)); - mrb_basic(e)->c = cl; + mrb_basic_ptr(e)->c = cl; } mrb_exc_raise(mrb, e); return mrb_nil_value(); /* NOTREACHED */ From f7a0946452dd5c65aa2dae01999c1dd349dabf1d Mon Sep 17 00:00:00 2001 From: Tomoyuki Sahara Date: Fri, 19 Sep 2014 13:22:56 +0900 Subject: [PATCH 12/14] mrb_const_defined returns true if it is defined on a super class. --- src/errno.c | 10 +++++----- test/errno.rb | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/errno.c b/src/errno.c index 9524bb52f..06737ac03 100644 --- a/src/errno.c +++ b/src/errno.c @@ -60,14 +60,14 @@ mrb_sce_init(mrb_state *mrb, mrb_value self) static mrb_value mrb_sce_errno(mrb_state *mrb, mrb_value self) { + struct RClass *c; mrb_sym sym; - mrb_value klass; - klass = mrb_obj_value(mrb_class(mrb, self)); + c = mrb_class(mrb, self); sym = mrb_intern_lit(mrb, "Errno"); - if (mrb_const_defined(mrb, klass, sym)) - return mrb_const_get(mrb, klass, sym); - else { + if (mrb_const_defined_at(mrb, c, sym)) { + return mrb_const_get(mrb, mrb_obj_value(c), sym); + } else { sym = mrb_intern_lit(mrb, "errno"); return mrb_attr_get(mrb, self, sym); } diff --git a/test/errno.rb b/test/errno.rb index 29def4d52..790311566 100644 --- a/test/errno.rb +++ b/test/errno.rb @@ -17,10 +17,10 @@ assert('SystemCallError#initialize') do end assert('SystemCallError#errno') do - SystemCallError.new("a", 1).errno == 1 and - SystemCallError.new(1).errno == 1 and - SystemCallError.new("a", 12345).errno == 12345 and - SystemCallError.new(23456).errno == 23456 + assert_equal 1, SystemCallError.new("a", 1).errno + assert_equal 1, SystemCallError.new(1).errno + assert_equal 12345, SystemCallError.new("a", 12345).errno + assert_equal 23456, SystemCallError.new(23456).errno end assert('SystemCallError#inspect') do From dfb471b40b9b5ef2e799813d1df2b4342c62d247 Mon Sep 17 00:00:00 2001 From: Tomoyuki Sahara Date: Fri, 19 Sep 2014 13:49:39 +0900 Subject: [PATCH 13/14] type of 2nd argument was changed. --- src/errno.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/errno.c b/src/errno.c index 06737ac03..ffea51162 100644 --- a/src/errno.c +++ b/src/errno.c @@ -65,7 +65,11 @@ mrb_sce_errno(mrb_state *mrb, mrb_value self) c = mrb_class(mrb, self); sym = mrb_intern_lit(mrb, "Errno"); +#if MRUBY_RELEASE_NO < 10000 if (mrb_const_defined_at(mrb, c, sym)) { +#else + if (mrb_const_defined_at(mrb, mrb_obj_value(c), sym)) { +#endif return mrb_const_get(mrb, mrb_obj_value(c), sym); } else { sym = mrb_intern_lit(mrb, "errno"); From b14df08be689cf8b94a046fd6f4154566523b19a Mon Sep 17 00:00:00 2001 From: Kazuho Oku Date: Wed, 6 Jan 2016 12:10:21 +0900 Subject: [PATCH 14/14] cast `mrb_int` to `int` before applying sprintf "%d" --- src/errno.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/errno.c b/src/errno.c index ffea51162..3617efd45 100644 --- a/src/errno.c +++ b/src/errno.c @@ -43,7 +43,7 @@ mrb_sce_init(mrb_state *mrb, mrb_value self) } else { mrb_iv_set(mrb, self, mrb_intern_lit(mrb, "errno"), mrb_fixnum_value(n)); str = mrb_str_new_cstr(mrb, "Unknown error: "); - snprintf(buf, sizeof(buf), "%d", n); + snprintf(buf, sizeof(buf), "%d", (int)n); mrb_str_cat2(mrb, str, buf); } } else {