OSDN Git Service

* fhandler.cc (fhandler_base::fchmod): Do the right thing when changing an "on
authorcgf <cgf>
Sun, 26 Dec 2004 02:10:28 +0000 (02:10 +0000)
committercgf <cgf>
Sun, 26 Dec 2004 02:10:28 +0000 (02:10 +0000)
disk" device or fifo.
(fhandler_base::fchown): Ditto for changing ownership.
* fhandler_disk_file.cc (fhandler_base::fstat_helper): Accommodate device files
on ntfs partitions.
* path.cc (path_conv::check): Use isfs function to figure out if a path exists
on a filesystem to make sure that device files are caught.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler.cc
winsup/cygwin/fhandler_disk_file.cc
winsup/cygwin/path.cc
winsup/cygwin/pinfo.cc

index 4e341a9..4ae5c13 100644 (file)
@@ -1,3 +1,13 @@
+2004-12-25  Christopher Faylor  <cgf@timesys.com>
+
+       * fhandler.cc (fhandler_base::fchmod): Do the right thing when changing
+       an "on disk" device or fifo.
+       (fhandler_base::fchown): Ditto for changing ownership.
+       * fhandler_disk_file.cc (fhandler_base::fstat_helper): Accommodate
+       device files on ntfs partitions.
+       * path.cc (path_conv::check): Use isfs function to figure out if a path
+       exists on a filesystem to make sure that device files are caught.
+
 2004-12-24  Christopher Faylor  <cgf@timesys.com>
 
        * child_info.h (CURR_CHILD_INFO_MAGIC): Update.
index 2507f32..61f9cc0 100644 (file)
@@ -1520,6 +1520,9 @@ fhandler_base::closedir (DIR *)
 int
 fhandler_base::fchmod (mode_t mode)
 {
+  extern int chmod_device (path_conv& pc, mode_t mode);
+  if (pc.is_fs_special ())
+    return chmod_device (pc, mode);
   /* By default, just succeeds. */
   return 0;
 }
@@ -1527,6 +1530,8 @@ fhandler_base::fchmod (mode_t mode)
 int
 fhandler_base::fchown (__uid32_t uid, __gid32_t gid)
 {
+  if (pc.is_fs_special ())
+    return ((fhandler_disk_file *) this)->fhandler_disk_file::fchown (uid, gid);
   /* By default, just succeeds. */
   return 0;
 }
index ebf9277..7fc6a14 100644 (file)
@@ -300,8 +300,15 @@ fhandler_base::fstat_helper (struct __stat64 *buf,
       if (pc.has_attribute (FILE_ATTRIBUTE_READONLY) && !pc.issymlink ())
        buf->st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
 
-      if (!(buf->st_mode & S_IFMT))
+      if (buf->st_mode & S_IFMT)
+       /* nothing */;
+      else if (!is_fs_special ())
        buf->st_mode |= S_IFREG;
+      else
+       {
+         buf->st_dev = dev ();
+         buf->st_mode = dev ().mode;
+       }
     }
   else
     {
index 7716f02..0e8aa97 100644 (file)
@@ -816,7 +816,7 @@ out:
       return;
     }
 
-  if (dev.devn == FH_FS)
+  if (dev.isfs ())
     {
       if (strncmp (path, "\\\\.\\", 4))
        {
index 69a4380..1bf6b5e 100644 (file)
@@ -71,7 +71,6 @@ set_myself (HANDLE h)
       ForceCloseHandle (cygheap->pid_handle);
       cygheap->pid_handle = NULL;
     }
-  return;
 }
 
 /* Initialize the process table entry for the current task.