diff options
Diffstat (limited to 'winsup/utils/cygpath.cc')
-rw-r--r-- | winsup/utils/cygpath.cc | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/winsup/utils/cygpath.cc b/winsup/utils/cygpath.cc index 2ba727a9c..449c5436e 100644 --- a/winsup/utils/cygpath.cc +++ b/winsup/utils/cygpath.cc @@ -233,8 +233,18 @@ get_device_name (char *path) ans.MaximumLength = len; ans.Buffer = ret + 4; RtlUnicodeStringToAnsiString (&ans, &odi->ObjectName, FALSE); - ZwClose (dir); - goto out; + /* Special case for local disks: It's most feasible if the + DOS device name reflects the DOS drive, so we check for this + explicitly and only return prematurely if so. */ +#define HARDDISK_PREFIX L"\\Device\\Harddisk" + if (ntdev.Length < wcslen (HARDDISK_PREFIX) + || wcsncasecmp (ntdev.Buffer, HARDDISK_PREFIX, 8) != 0 + || (odi->ObjectName.Length == 2 * sizeof (WCHAR) + && odi->ObjectName.Buffer[1] == L':')) + { + ZwClose (dir); + goto out; + } } } ZwClose (dir); |