summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-05 05:19:45 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-05 05:19:45 +0000
commit9a7def6ea9d47f6d9cb892bb4d4bb45a615b2a7b (patch)
tree11f7bb55fc088fe08beb794bc5583ffec8250f5c
parentf2aa0e5b0c0fb80f9400fae1bdc2bfccedbc314b (diff)
* file.c (rb_stat_mode): generalized st_mode mask.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18365 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--file.c16
2 files changed, 11 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 4b61384482..e35ed05330 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Tue Aug 5 14:19:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_stat_mode): generalized st_mode mask.
+
Tue Aug 5 12:43:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* io.c (retry_sendfile, retry_read): ENOSYS and EWOULDBLOCK are not
diff --git a/file.c b/file.c
index 78e7a14591..6888ad0ea3 100644
--- a/file.c
+++ b/file.c
@@ -233,6 +233,8 @@ rb_stat_cmp(VALUE self, VALUE other)
return Qnil;
}
+#define ST2UINT(val) ((val) & ~(~1UL << (sizeof(val) * CHAR_BIT - 1)))
+
/*
* call-seq:
* stat.dev => fixnum
@@ -330,11 +332,7 @@ rb_stat_ino(VALUE self)
static VALUE
rb_stat_mode(VALUE self)
{
-#ifdef __BORLANDC__
- return UINT2NUM((unsigned short)(get_stat(self)->st_mode));
-#else
- return UINT2NUM(get_stat(self)->st_mode);
-#endif
+ return UINT2NUM(ST2UINT(get_stat(self)->st_mode));
}
/*
@@ -4034,10 +4032,10 @@ rb_stat_wr(VALUE obj)
{
#ifdef S_IROTH
if ((get_stat(obj)->st_mode & (S_IROTH)) == S_IROTH) {
- return UINT2NUM(get_stat(obj)->st_mode & (S_IRUGO|S_IWUGO|S_IXUGO));
+ return UINT2NUM(get_stat(obj)->st_mode & (S_IRUGO|S_IWUGO|S_IXUGO));
}
else {
- return Qnil;
+ return Qnil;
}
#endif
}
@@ -4126,10 +4124,10 @@ rb_stat_ww(VALUE obj)
{
#ifdef S_IROTH
if ((get_stat(obj)->st_mode & (S_IWOTH)) == S_IWOTH) {
- return UINT2NUM(get_stat(obj)->st_mode & (S_IRUGO|S_IWUGO|S_IXUGO));
+ return UINT2NUM(get_stat(obj)->st_mode & (S_IRUGO|S_IWUGO|S_IXUGO));
}
else {
- return Qnil;
+ return Qnil;
}
#endif
}