This is the mail archive of the cygwin-cvs@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[newlib-cygwin/cygwin-acl] Add support for Parallels Desktop FS (prlfs)


https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=dad28a9a17a862605b3b5a5ed2c1918f8d6d6793

commit dad28a9a17a862605b3b5a5ed2c1918f8d6d6793
Author: Corinna Vinschen <corinna@vinschen.de>
Date:   Mon Nov 2 12:08:25 2015 +0100

    Add support for Parallels Desktop FS (prlfs)
    
    	* mount.h (enum fs_info_type): Add prlfs (Parallels Desktop FS).
    	(class fs_info): Add has_broken_fnoi flag.  Implement prlfs FS flag.
    	* mount.cc (fs_info::update): Handle PrlFS.  Fill new has_broken_fnoi
    	flag with life.
    	(fs_names): Add prlfs.
    	* globals.cc (ro_u_prlfs): Define.
    	* path.h (path_conv::has_broken_fnoi): New method.
    	* path.cc (symlink_info::check): Call file_get_fnoi utilizing new
    	has_broken_fnoi filesystem flag.
    	* fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Ditto.
    
    	* new-features.xml (ov-new2.3): Document Parallels Desktop FS support.
    
    Signed-off-by: Corinna Vinschen <corinna@vinschen.de>

Diff:
---
 winsup/cygwin/ChangeLog             | 13 +++++++++++++
 winsup/cygwin/fhandler_disk_file.cc |  2 +-
 winsup/cygwin/globals.cc            |  1 +
 winsup/cygwin/mount.cc              | 10 ++++++++--
 winsup/cygwin/mount.h               |  6 +++++-
 winsup/cygwin/path.cc               |  3 ++-
 winsup/cygwin/path.h                |  1 +
 winsup/cygwin/release/2.3.0         |  2 ++
 winsup/doc/ChangeLog                |  4 ++++
 winsup/doc/new-features.xml         |  4 ++++
 10 files changed, 41 insertions(+), 5 deletions(-)

diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index ba11e0c..cd4de37 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,16 @@
+2015-11-02  Corinna Vinschen  <corinna@vinschen.de>
+
+	* mount.h (enum fs_info_type): Add prlfs (Parallels Desktop FS).
+	(class fs_info): Add has_broken_fnoi flag.  Implement prlfs FS flag.
+	* mount.cc (fs_info::update): Handle PrlFS.  Fill new has_broken_fnoi
+	flag with life.
+	(fs_names): Add prlfs.
+	* globals.cc (ro_u_prlfs): Define.
+	* path.h (path_conv::has_broken_fnoi): New method.
+	* path.cc (symlink_info::check): Call file_get_fnoi utilizing new
+	has_broken_fnoi filesystem flag.
+	* fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Ditto.
+
 2015-10-30  Corinna Vinschen  <corinna@vinschen.de>
 
 	* nlsfuncs.cc (__get_lcid_from_locale): Handle LocaleNameToLCID
diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc
index 4885885..cf87d2c 100644
--- a/winsup/cygwin/fhandler_disk_file.cc
+++ b/winsup/cygwin/fhandler_disk_file.cc
@@ -416,7 +416,7 @@ fhandler_base::fstat_by_handle (struct stat *buf)
      on the information stored in pc.fnoi.  So we overwrite them here. */
   if (get_io_handle ())
     {
-      status = file_get_fnoi (h, pc.fs_is_netapp (), pc.fnoi ());
+      status = file_get_fnoi (h, pc.has_broken_fnoi (), pc.fnoi ());
       if (!NT_SUCCESS (status))
        {
 	 debug_printf ("%y = NtQueryInformationFile(%S, "
diff --git a/winsup/cygwin/globals.cc b/winsup/cygwin/globals.cc
index 09c08f2..7a17376 100644
--- a/winsup/cygwin/globals.cc
+++ b/winsup/cygwin/globals.cc
@@ -138,6 +138,7 @@ extern "C" {
   extern UNICODE_STRING _RDATA ro_u_mvfs = _ROU (L"MVFS");
   extern UNICODE_STRING _RDATA ro_u_nfs = _ROU (L"NFS");
   extern UNICODE_STRING _RDATA ro_u_ntfs = _ROU (L"NTFS");
+  extern UNICODE_STRING _RDATA ro_u_prlfs = _ROU (L"PrlSF"); /* No typo! */
   extern UNICODE_STRING _RDATA ro_u_refs = _ROU (L"ReFS");
   extern UNICODE_STRING _RDATA ro_u_sunwnfs = _ROU (L"SUNWNFS");
   extern UNICODE_STRING _RDATA ro_u_udf = _ROU (L"UDF");
diff --git a/winsup/cygwin/mount.cc b/winsup/cygwin/mount.cc
index 6cf3ddf..01f1759 100644
--- a/winsup/cygwin/mount.cc
+++ b/winsup/cygwin/mount.cc
@@ -1,7 +1,7 @@
 /* mount.cc: mount handling.
 
    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-   2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
+   2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Red Hat, Inc.
 
 This file is part of Cygwin.
 
@@ -370,7 +370,8 @@ fs_info::update (PUNICODE_STRING upath, HANDLE in_vol)
 	  && !is_unixfs (RtlEqualUnicodeString (&fsname, &ro_u_unixfs, FALSE))
 	  /* AFSRDRFsd == Andrew File System.  Doesn't support DOS attributes.
 	     Only native symlinks are supported. */
-	  && !is_afs (RtlEqualUnicodeString (&fsname, &ro_u_afs, FALSE)))
+	  && !is_afs (RtlEqualUnicodeString (&fsname, &ro_u_afs, FALSE))
+	  && !is_prlfs (RtlEqualUnicodeString (&fsname, &ro_u_prlfs, FALSE)))
 	{
 	  /* Known remote file system with buggy open calls.  Further
 	     explanation in fhandler.cc (fhandler_disk_file::open_fs). */
@@ -402,6 +403,10 @@ fs_info::update (PUNICODE_STRING upath, HANDLE in_vol)
 	     only support this if the filename is non-null and the handle is
 	     the handle to a directory. NcFsd IR10 is supposed to be ok. */
 	  has_buggy_reopen (is_netapp () || is_nwfs ());
+	  /* Netapp and Parallels Desktop FS have problems with the
+	     FileNetworkOpenInformation info class.  Netapp doesn't
+	     implement it at all, Parallels always returns a size of 0. */
+	  has_broken_fnoi (is_netapp () || is_prlfs ());
 	}
     }
   if (!got_fs ()
@@ -1527,6 +1532,7 @@ fs_names_t fs_names[] = {
     { "nwfs", false },
     { "ncfsd", false },
     { "afs", false },
+    { "prlfs", false },
     { NULL, false }
 };
 
diff --git a/winsup/cygwin/mount.h b/winsup/cygwin/mount.h
index e7d5426..986f9a9 100644
--- a/winsup/cygwin/mount.h
+++ b/winsup/cygwin/mount.h
@@ -1,7 +1,7 @@
 /* mount.h: mount definitions.
 
    Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-   2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
+   2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Red Hat, Inc.
 
 This file is part of Cygwin.
 
@@ -45,6 +45,7 @@ enum fs_info_type
   nwfs,
   ncfsd,
   afs,
+  prlfs,
   /* Always last. */
   max_fs_type
 };
@@ -75,6 +76,7 @@ class fs_info
     unsigned has_buggy_fileid_dirinfo	: 1;
     unsigned has_buggy_basic_info	: 1;
     unsigned has_dos_filenames_only	: 1;
+    unsigned has_broken_fnoi		: 1;
   } status;
   ULONG sernum;			/* Volume Serial Number */
   char fsn[80];			/* Windows filesystem name */
@@ -100,6 +102,7 @@ class fs_info
   IMPLEMENT_STATUS_FLAG (bool, has_buggy_fileid_dirinfo)
   IMPLEMENT_STATUS_FLAG (bool, has_buggy_basic_info)
   IMPLEMENT_STATUS_FLAG (bool, has_dos_filenames_only)
+  IMPLEMENT_STATUS_FLAG (bool, has_broken_fnoi)
   IMPLEMENT_FS_FLAG (fat)
   IMPLEMENT_FS_FLAG (ntfs)
   IMPLEMENT_FS_FLAG (refs)
@@ -116,6 +119,7 @@ class fs_info
   IMPLEMENT_FS_FLAG (nwfs)
   IMPLEMENT_FS_FLAG (ncfsd)
   IMPLEMENT_FS_FLAG (afs)
+  IMPLEMENT_FS_FLAG (prlfs)
   fs_info_type what_fs () const { return status.fs_type; }
   bool got_fs () const { return status.fs_type != none; }
 
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index 96cf3f5..f26e7f8 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -2827,7 +2827,8 @@ restart:
 	    }
 	  else
 	    {
-	      status = file_get_fnoi (h, fs.is_netapp (), conv_hdl.fnoi ());
+	      status = file_get_fnoi (h, fs.has_broken_fnoi (),
+				      conv_hdl.fnoi ());
 	      if (NT_SUCCESS (status))
 		fileattr = conv_hdl.fnoi ()->FileAttributes;
 	    }
diff --git a/winsup/cygwin/path.h b/winsup/cygwin/path.h
index 5c464dc..f8cb37a 100644
--- a/winsup/cygwin/path.h
+++ b/winsup/cygwin/path.h
@@ -169,6 +169,7 @@ class path_conv
   int has_buggy_reopen () const {return fs.has_buggy_reopen ();}
   int has_buggy_fileid_dirinfo () const {return fs.has_buggy_fileid_dirinfo ();}
   int has_buggy_basic_info () const {return fs.has_buggy_basic_info ();}
+  int has_broken_fnoi () const {return fs.has_broken_fnoi ();}
   int binmode () const
   {
     if (path_flags & PATH_BINARY)
diff --git a/winsup/cygwin/release/2.3.0 b/winsup/cygwin/release/2.3.0
index d58de2f..ae8f3fc 100644
--- a/winsup/cygwin/release/2.3.0
+++ b/winsup/cygwin/release/2.3.0
@@ -25,6 +25,8 @@ What changed:
 - setfacl(1) now allows to use the -b and -k option combined to allow reducing
   an ACL to only reflect standard POSIX permissions.
 
+- Add support for Parallels Desktop FS (prlfs).
+
 
 Bug Fixes
 ---------
diff --git a/winsup/doc/ChangeLog b/winsup/doc/ChangeLog
index f289628..14dd387 100644
--- a/winsup/doc/ChangeLog
+++ b/winsup/doc/ChangeLog
@@ -1,3 +1,7 @@
+2015-11-02  Corinna Vinschen  <corinna@vinschen.de>
+
+	* new-features.xml (ov-new2.3): Document Parallels Desktop FS support.
+
 2015-10-27  Corinna Vinschen  <corinna@vinschen.de>
 
 	* new-features.xml (ov-new2.3): Document strftime %s addition.
diff --git a/winsup/doc/new-features.xml b/winsup/doc/new-features.xml
index d65145b..9e742f4 100644
--- a/winsup/doc/new-features.xml
+++ b/winsup/doc/new-features.xml
@@ -40,6 +40,10 @@ an ACL to only reflect standard POSIX permissions.
 New API: aligned_alloc, at_quick_exit, quick_exit.
 </para></listitem>
 
+<listitem><para>
+Add support for Parallels Desktop FS (prlfs).
+</para></listitem>
+
 </itemizedlist>
 
 </sect2>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]