diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2010-08-26 16:06:27 +0400 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2010-08-26 16:06:27 +0400 |
commit | 708bbfd08e3af41be76e864e822fe5cc638f5715 (patch) | |
tree | a7476b8c177c2b08125e1881b3667afaae45fd38 /winsup/utils/cygpath.cc | |
parent | 46059af75c7681bd76fadfc2415c96c849f275fd (diff) |
* cygpath.cc (get_device_name): Prefer the \\.\X: DOS device for
harddisks, if available.
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); |