diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | configure.in | 1 | ||||
-rw-r--r-- | process.c | 4 |
3 files changed, 11 insertions, 2 deletions
@@ -1,3 +1,11 @@ +Fri Jan 28 10:58:20 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com> + + * configure.in: Added mode_t type checking. + * process.c (rb_exec_arg_addopt): Use NUM2MODET() instead + NUM2LONG because clang makes compile error by this narrowing + conversion. + * process.c (rb_run_exec_options_err): ditto. + Fri Jan 28 02:37:18 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com> * re.c (rb_reg_raise): add GC guard to prevent intermediate diff --git a/configure.in b/configure.in index 795d7f1bcf..4ef9e37a5c 100644 --- a/configure.in +++ b/configure.in @@ -686,6 +686,7 @@ RUBY_REPLACE_TYPE(uid_t, int, UIDT) RUBY_REPLACE_TYPE(gid_t, int, GIDT) RUBY_REPLACE_TYPE(time_t, [], TIMET, [@%:@include <time.h>]) RUBY_REPLACE_TYPE(dev_t, [int long "long long"], DEVT) +RUBY_REPLACE_TYPE(mode_t, ["unsigned int" long], MODET, [@%:@include <sys/stat.h>]) AC_CACHE_CHECK(for prototypes, rb_cv_have_prototypes, [AC_TRY_COMPILE([int foo(int x) { return 0; }], [return foo(10);], @@ -1516,7 +1516,7 @@ rb_exec_arg_addopt(struct rb_exec_arg *e, VALUE key, VALUE val) hide_obj(rb_str_dup(val))); } else if (id == rb_intern("umask")) { - mode_t cmask = NUM2LONG(val); + mode_t cmask = NUM2MODET(val); if (!NIL_P(rb_ary_entry(options, EXEC_OPTION_UMASK))) { rb_raise(rb_eArgError, "umask option specified twice"); } @@ -2335,7 +2335,7 @@ rb_run_exec_options_err(const struct rb_exec_arg *e, struct rb_exec_arg *s, char obj = rb_ary_entry(options, EXEC_OPTION_UMASK); if (!NIL_P(obj)) { - mode_t mask = NUM2LONG(obj); + mode_t mask = NUM2MODET(obj); mode_t oldmask = umask(mask); /* never fail */ if (!NIL_P(soptions)) rb_ary_store(soptions, EXEC_OPTION_UMASK, LONG2NUM(oldmask)); |