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,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

View File

@ -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, "

View File

@ -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");

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

View File

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

View File

@ -2828,7 +2828,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;
}

View File

@ -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)

View File

@ -22,6 +22,8 @@ What's new:
What changed:
-------------
- Add support for Parallels Desktop FS (prlfs).
Bug Fixes
---------

View File

@ -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.

View File

@ -35,6 +35,10 @@ sysconf() now supports returning CPU cache information:
New API: aligned_alloc, at_quick_exit, quick_exit.
</para></listitem>
<listitem><para>
Add support for Parallels Desktop FS (prlfs).
</para></listitem>
</itemizedlist>
</sect2>