OSDN Git Service

* fhandler.cc (fhandler_base::fhaccess): Add check for R/O file system.
authorcorinna <corinna>
Tue, 17 Jul 2007 14:39:02 +0000 (14:39 +0000)
committercorinna <corinna>
Tue, 17 Jul 2007 14:39:02 +0000 (14:39 +0000)
* security.cc (check_registry_access): Set errno to EROFS when checking
for W_OK.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler.cc
winsup/cygwin/security.cc

index 50a09c1..5afa9da 100644 (file)
@@ -1,5 +1,11 @@
 2007-07-17  Corinna Vinschen  <corinna@vinschen.de>
 
+       * fhandler.cc (fhandler_base::fhaccess): Add check for R/O file system.
+       * security.cc (check_registry_access): Set errno to EROFS when checking
+       for W_OK.
+
+2007-07-17  Corinna Vinschen  <corinna@vinschen.de>
+
        * fhandler_disk_file.cc (fhandler_disk_file::opendir): Move setting
        cfd->nohandle where it won't crash.
 
index ccd556c..1920dbe 100644 (file)
@@ -443,6 +443,12 @@ fhandler_base::fhaccess (int flags)
 eaccess_done:
   set_errno (EACCES);
 done:
+  if (!res && (flags & W_OK) && get_device () == FH_FS
+      && (pc.fs_flags () & FILE_READ_ONLY_VOLUME))
+    {
+      set_errno (EROFS);
+      res = -1;
+    }
   debug_printf ("returning %d", res);
   return res;
 }
index 130b92d..2c3cb14 100644 (file)
@@ -2044,7 +2044,10 @@ check_registry_access (HANDLE hdl, int flags)
     ret = check_access (sd, mapping, desired, flags);
   /* As long as we can't write the registry... */
   if (flags & W_OK)
-    ret = -1;
+    {
+      set_errno (EROFS);
+      ret = -1;
+    }
   debug_printf ("flags %x, ret %d", flags, ret);
   return ret;
 }