Don't leave Windows 2000 behind.
* autoload.cc (GetSystemWow64DirectoryW): Define. (GetVolumePathNamesForVolumeNameW): Define. * fhandler_process.cc (get_volume_path_names_for_volume_name): New static function to workaround missing GetVolumePathNamesForVolumeNameW function in Windows 2000. (dos_drive_mappings::dos_drive_mappings): Call get_volume_path_names_for_volume_name instead of GetVolumePathNamesForVolumeNameW.
This commit is contained in:
parent
a5d1e69e3d
commit
e74758408e
@ -1,3 +1,14 @@
|
|||||||
|
2011-12-14 Corinna Vinschen <vinschen@redhat.com>
|
||||||
|
|
||||||
|
* autoload.cc (GetSystemWow64DirectoryW): Define.
|
||||||
|
(GetVolumePathNamesForVolumeNameW): Define.
|
||||||
|
* fhandler_process.cc (get_volume_path_names_for_volume_name): New
|
||||||
|
static function to workaround missing GetVolumePathNamesForVolumeNameW
|
||||||
|
function in Windows 2000.
|
||||||
|
(dos_drive_mappings::dos_drive_mappings): Call
|
||||||
|
get_volume_path_names_for_volume_name instead of
|
||||||
|
GetVolumePathNamesForVolumeNameW.
|
||||||
|
|
||||||
2011-12-13 Christopher Faylor <me.cygwin2011@cgf.cx>
|
2011-12-13 Christopher Faylor <me.cygwin2011@cgf.cx>
|
||||||
|
|
||||||
* dcrt0.cc (init_windows_system_directory): Record
|
* dcrt0.cc (init_windows_system_directory): Record
|
||||||
|
@ -392,6 +392,8 @@ LoadDLLfunc (GetUdpTable, 12, iphlpapi)
|
|||||||
LoadDLLfuncEx (AttachConsole, 4, kernel32, 1)
|
LoadDLLfuncEx (AttachConsole, 4, kernel32, 1)
|
||||||
LoadDLLfuncEx (GetModuleHandleExW, 12, kernel32, 1)
|
LoadDLLfuncEx (GetModuleHandleExW, 12, kernel32, 1)
|
||||||
LoadDLLfuncEx (GetNamedPipeClientProcessId, 8, kernel32, 1)
|
LoadDLLfuncEx (GetNamedPipeClientProcessId, 8, kernel32, 1)
|
||||||
|
LoadDLLfuncEx (GetSystemWow64DirectoryW, 8, kernel32, 1)
|
||||||
|
LoadDLLfuncEx (GetVolumePathNamesForVolumeNameW, 16, kernel32, 1)
|
||||||
LoadDLLfunc (LocaleNameToLCID, 8, kernel32)
|
LoadDLLfunc (LocaleNameToLCID, 8, kernel32)
|
||||||
|
|
||||||
LoadDLLfunc (WNetCloseEnum, 4, mpr)
|
LoadDLLfunc (WNetCloseEnum, 4, mpr)
|
||||||
|
@ -544,6 +544,41 @@ format_process_winexename (void *data, char *&destbuf)
|
|||||||
return len + 1;
|
return len + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
get_volume_path_names_for_volume_name (LPCWSTR vol, LPWSTR mounts)
|
||||||
|
{
|
||||||
|
DWORD len;
|
||||||
|
if (GetVolumePathNamesForVolumeNameW (vol, mounts, NT_MAX_PATH, &len))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
/* Windows 2000 doesn't have GetVolumePathNamesForVolumeNameW.
|
||||||
|
Just assume that mount points are not longer than MAX_PATH. */
|
||||||
|
WCHAR drives[MAX_PATH], dvol[MAX_PATH], mp[MAX_PATH + 3];
|
||||||
|
if (!GetLogicalDriveStringsW (MAX_PATH, drives))
|
||||||
|
return false;
|
||||||
|
for (PWCHAR drive = drives; *drive; drive = wcschr (drive, '\0') + 1)
|
||||||
|
{
|
||||||
|
if (!GetVolumeNameForVolumeMountPointW (drive, dvol, MAX_PATH))
|
||||||
|
continue;
|
||||||
|
if (!wcscasecmp (vol, dvol))
|
||||||
|
mounts = wcpcpy (mounts, drive) + 1;
|
||||||
|
wcscpy (mp, drive);
|
||||||
|
HANDLE h = FindFirstVolumeMountPointW (dvol, mp + 3, MAX_PATH);
|
||||||
|
if (h == INVALID_HANDLE_VALUE)
|
||||||
|
continue;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (GetVolumeNameForVolumeMountPointW (mp, dvol, MAX_PATH))
|
||||||
|
if (!wcscasecmp (vol, dvol))
|
||||||
|
mounts = wcpcpy (mounts, drive) + 1;
|
||||||
|
}
|
||||||
|
while (FindNextVolumeMountPointW (h, mp, MAX_PATH));
|
||||||
|
FindVolumeMountPointClose (h);
|
||||||
|
}
|
||||||
|
*mounts = L'\0';
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
struct dos_drive_mappings
|
struct dos_drive_mappings
|
||||||
{
|
{
|
||||||
struct mapping
|
struct mapping
|
||||||
@ -573,9 +608,8 @@ struct dos_drive_mappings
|
|||||||
else
|
else
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
DWORD len;
|
|
||||||
/* Skip drives which are not mounted. */
|
/* Skip drives which are not mounted. */
|
||||||
if (!GetVolumePathNamesForVolumeNameW (vol, mounts, NT_MAX_PATH, &len)
|
if (!get_volume_path_names_for_volume_name (vol, mounts)
|
||||||
|| mounts[0] == L'\0')
|
|| mounts[0] == L'\0')
|
||||||
continue;
|
continue;
|
||||||
*wcsrchr (vol, L'\\') = L'\0';
|
*wcsrchr (vol, L'\\') = L'\0';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user