From 57d93bebb2d940f4f2338a5e156f9ddcd7d1fbc7 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 4 Nov 2015 14:47:25 +0100 Subject: [PATCH] Accommodate trailing NUL in PrlSF filesystem name. * globals.cc (ro_u_prlfs): Add trailing NUL. Explain why. * mount.cc (fs_info::update): Add a comment to explain PrlSF. * path.h (path_conv::fs_is_prlfs): Add for symmetry. Signed-off-by: Corinna Vinschen --- winsup/cygwin/ChangeLog | 6 ++++++ winsup/cygwin/globals.cc | 4 +++- winsup/cygwin/mount.cc | 2 ++ winsup/cygwin/path.h | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index b990d9f15..b848583e7 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2015-11-04 Corinna Vinschen + + * globals.cc (ro_u_prlfs): Add trailing NUL. Explain why. + * mount.cc (fs_info::update): Add a comment to explain PrlSF. + * path.h (path_conv::fs_is_prlfs): Add for symmetry. + 2015-11-03 Corinna Vinschen * sigproc.cc (pending_signals::clear): Fix previous fix resulting in diff --git a/winsup/cygwin/globals.cc b/winsup/cygwin/globals.cc index 7a17376af..383b8f115 100644 --- a/winsup/cygwin/globals.cc +++ b/winsup/cygwin/globals.cc @@ -138,7 +138,9 @@ 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! */ + /* No typo! It's actually "SF", not "FS", and the trailing NUL is counted + in the reply from the filesystem. */ + extern UNICODE_STRING _RDATA ro_u_prlfs = _ROU (L"PrlSF\0"); 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 01f17598c..66e857160 100644 --- a/winsup/cygwin/mount.cc +++ b/winsup/cygwin/mount.cc @@ -371,6 +371,8 @@ fs_info::update (PUNICODE_STRING upath, HANDLE in_vol) /* AFSRDRFsd == Andrew File System. Doesn't support DOS attributes. Only native symlinks are supported. */ && !is_afs (RtlEqualUnicodeString (&fsname, &ro_u_afs, FALSE)) + /* PrlSF == Parallels Desktop File System. Has a bug in + FileNetworkOpenInformation, see below. */ && !is_prlfs (RtlEqualUnicodeString (&fsname, &ro_u_prlfs, FALSE))) { /* Known remote file system with buggy open calls. Further diff --git a/winsup/cygwin/path.h b/winsup/cygwin/path.h index f8cb37a8b..ce41645e0 100644 --- a/winsup/cygwin/path.h +++ b/winsup/cygwin/path.h @@ -376,6 +376,7 @@ class path_conv bool fs_is_nwfs () const {return fs.is_nwfs ();} bool fs_is_ncfsd () const {return fs.is_ncfsd ();} bool fs_is_afs () const {return fs.is_afs ();} + bool fs_is_prlfs () const {return fs.is_prlfs ();} fs_info_type fs_type () const {return fs.what_fs ();} ULONG fs_serial_number () const {return fs.serial_number ();} inline const char *set_path (const char *p)