From e4556f6060b13862ad08320cd40ab432f5ac498e Mon Sep 17 00:00:00 2001 From: Filip Navara Date: Sat, 17 Dec 2005 12:05:55 +0000 Subject: [PATCH] Minor cleanup of GetVolumeNameForVolumeMountPointW and fix some incorrect return codes (spotted by w3seek). svn path=/trunk/; revision=20219 --- reactos/lib/kernel32/file/volume.c | 78 ++++++++++++++++-------------- 1 file changed, 42 insertions(+), 36 deletions(-) diff --git a/reactos/lib/kernel32/file/volume.c b/reactos/lib/kernel32/file/volume.c index d0cf38222cd..7ae9db16183 100644 --- a/reactos/lib/kernel32/file/volume.c +++ b/reactos/lib/kernel32/file/volume.c @@ -811,7 +811,6 @@ GetVolumeNameForVolumeMountPointW( OBJECT_ATTRIBUTES ObjectAttributes; HANDLE FileHandle; IO_STATUS_BLOCK Iosb; - PVOID Buffer; ULONG BufferLength; PMOUNTDEV_NAME MountDevName; PMOUNTMGR_MOUNT_POINT MountPoint; @@ -819,6 +818,7 @@ GetVolumeNameForVolumeMountPointW( PMOUNTMGR_MOUNT_POINTS MountPoints; ULONG Index; PUCHAR SymbolicLinkName; + BOOL Result; NTSTATUS Status; /* @@ -858,29 +858,31 @@ GetVolumeNameForVolumeMountPointW( BufferLength = sizeof(MOUNTDEV_NAME) + 50 * sizeof(WCHAR); do { - MountDevName = Buffer = RtlAllocateHeap(GetProcessHeap(), 0, BufferLength); - if (Buffer == NULL) + MountDevName = RtlAllocateHeap(GetProcessHeap(), 0, BufferLength); + if (MountDevName == NULL) { NtClose(FileHandle); - SetLastErrorByStatus(Status); + SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } Status = NtDeviceIoControlFile(FileHandle, NULL, NULL, NULL, &Iosb, IOCTL_MOUNTDEV_QUERY_DEVICE_NAME, - NULL, 0, Buffer, BufferLength); - if (Status == STATUS_BUFFER_OVERFLOW) + NULL, 0, MountDevName, BufferLength); + if (!NT_SUCCESS(Status)) { - BufferLength = sizeof(MOUNTDEV_NAME) + MountDevName->NameLength; - RtlFreeHeap(GetProcessHeap(), 0, Buffer); - continue; - } - else if (!NT_SUCCESS(Status)) - { - RtlFreeHeap(GetProcessHeap(), 0, Buffer); - NtClose(FileHandle); - SetLastErrorByStatus(Status); - return FALSE; + RtlFreeHeap(GetProcessHeap(), 0, MountDevName); + if (Status == STATUS_BUFFER_OVERFLOW) + { + BufferLength = sizeof(MOUNTDEV_NAME) + MountDevName->NameLength; + continue; + } + else + { + NtClose(FileHandle); + SetLastErrorByStatus(Status); + return FALSE; + } } } while (!NT_SUCCESS(Status)); @@ -920,31 +922,33 @@ GetVolumeNameForVolumeMountPointW( BufferLength = sizeof(MOUNTMGR_MOUNT_POINTS); do { - MountPoints = Buffer = RtlAllocateHeap(GetProcessHeap(), 0, BufferLength); - if (Buffer == NULL) + MountPoints = RtlAllocateHeap(GetProcessHeap(), 0, BufferLength); + if (MountPoints == NULL) { RtlFreeHeap(GetProcessHeap(), 0, MountPoint); NtClose(FileHandle); - SetLastErrorByStatus(Status); + SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } Status = NtDeviceIoControlFile(FileHandle, NULL, NULL, NULL, &Iosb, IOCTL_MOUNTMGR_QUERY_POINTS, MountPoint, MountPointSize, - Buffer, BufferLength); - if (Status == STATUS_BUFFER_OVERFLOW) - { - BufferLength = MountPoints->Size; - RtlFreeHeap(GetProcessHeap(), 0, Buffer); - continue; - } - else if (!NT_SUCCESS(Status)) + MountPoints, BufferLength); + if (!NT_SUCCESS(Status)) { - RtlFreeHeap(GetProcessHeap(), 0, MountPoint); - RtlFreeHeap(GetProcessHeap(), 0, Buffer); - SetLastErrorByStatus(Status); - return FALSE; + RtlFreeHeap(GetProcessHeap(), 0, MountPoints); + if (Status == STATUS_BUFFER_OVERFLOW) + { + BufferLength = MountPoints->Size; + continue; + } + else if (!NT_SUCCESS(Status)) + { + RtlFreeHeap(GetProcessHeap(), 0, MountPoint); + SetLastErrorByStatus(Status); + return FALSE; + } } } while (!NT_SUCCESS(Status)); @@ -983,14 +987,16 @@ GetVolumeNameForVolumeMountPointW( (PUCHAR)MountPoints + MountPoint->SymbolicLinkNameOffset, MountPoint->SymbolicLinkNameLength); VolumeName[1] = L'\\'; + Result = TRUE; + } + else + { RtlFreeHeap(GetProcessHeap(), 0, MountPoints); - return TRUE; + SetLastError(ERROR_FILENAME_EXCED_RANGE); + Result = FALSE; } - RtlFreeHeap(GetProcessHeap(), 0, MountPoints); - SetLastError(ERROR_FILENAME_EXCED_RANGE); - - return FALSE; + return Result; } } } -- 2.17.1