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>
This commit is contained in:
Corinna Vinschen
2015-11-02 12:08:25 +01:00
parent 7ac60f6ceb
commit df6206aa56
10 changed files with 41 additions and 5 deletions

View File

@@ -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 }
};