aboutsummaryrefslogtreecommitdiffstats
path: root/file.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-08-27 04:01:37 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-08-27 04:01:37 +0000
commit262b10210fd597d467d88bdc0a2f3a1efdb80a53 (patch)
treefa238ae5c2459498d399425117b84d8a6b93777c /file.c
parenta2da0f7e4295115680491abce9f6dc533db11f8a (diff)
downloadruby-262b10210fd597d467d88bdc0a2f3a1efdb80a53.tar.gz
win32.c: fchmod
* win32/win32.c (fchmod): implement by using SetFileInformationByHandle. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51704 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'file.c')
-rw-r--r--file.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/file.c b/file.c
index e6edbba44c..f4ba59acc3 100644
--- a/file.c
+++ b/file.c
@@ -2357,7 +2357,7 @@ rb_file_chmod(VALUE obj, VALUE vmode)
{
rb_io_t *fptr;
int mode;
-#ifndef HAVE_FCHMOD
+#if !defined HAVE_FCHMOD || !HAVE_FCHMOD
VALUE path;
#endif
@@ -2365,9 +2365,15 @@ rb_file_chmod(VALUE obj, VALUE vmode)
GetOpenFile(obj, fptr);
#ifdef HAVE_FCHMOD
- if (fchmod(fptr->fd, mode) == -1)
- rb_sys_fail_path(fptr->pathv);
-#else
+ if (fchmod(fptr->fd, mode) == -1) {
+ if (HAVE_FCHMOD || errno != ENOSYS)
+ rb_sys_fail_path(fptr->pathv);
+ }
+ else {
+ if (!HAVE_FCHMOD) return INT2FIX(0);
+ }
+#endif
+#if !defined HAVE_FCHMOD || !HAVE_FCHMOD
if (NIL_P(fptr->pathv)) return Qnil;
path = rb_str_encode_ospath(fptr->pathv);
if (chmod(RSTRING_PTR(path), mode) == -1)