diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2009-08-24 11:14:30 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2009-08-24 11:14:30 +0000 |
commit | 11788f8ce076b1be50b22aa91b8f1302641666cb (patch) | |
tree | 45627c3ca56deaa485af21ad14b228cccbef5ce5 /winsup/cygwin/path.cc | |
parent | 84acd4c98908f2a54b20f07d3e18ff683708b7be (diff) | |
download | cygnal-11788f8ce076b1be50b22aa91b8f1302641666cb.tar.gz cygnal-11788f8ce076b1be50b22aa91b8f1302641666cb.tar.bz2 cygnal-11788f8ce076b1be50b22aa91b8f1302641666cb.zip |
* globals.cc (ro_u_volume): New R/O unicode string.
* path.cc (symlink_info::check_reparse_point): Fix check for volume
mount points to work on Vista and later as well.
Diffstat (limited to 'winsup/cygwin/path.cc')
-rw-r--r-- | winsup/cygwin/path.cc | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index 4d5424c76..e6782f6e9 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -1865,9 +1865,16 @@ symlink_info::check_reparse_point (HANDLE h) } else if (rp->ReparseTag == IO_REPARSE_TAG_MOUNT_POINT) { - if (rp->SymbolicLinkReparseBuffer.PrintNameLength == 0) + UNICODE_STRING subst; + + RtlInitCountedUnicodeString (&subst, + (WCHAR *)((char *)rp->MountPointReparseBuffer.PathBuffer + + rp->MountPointReparseBuffer.SubstituteNameOffset), + rp->MountPointReparseBuffer.SubstituteNameLength); + if (rp->MountPointReparseBuffer.PrintNameLength == 0 + || RtlEqualUnicodePathPrefix (&subst, &ro_u_volume, TRUE)) { - /* Likely a volume mount point. Not treated as symlink. */ + /* Volume mount point. Not treated as symlink. */ return 0; } sys_wcstombs (srcbuf, SYMLINK_MAX + 1, |