Minor cleanup of GetVolumeNameForVolumeMountPointW and fix some incorrect return codes (spotted by w3seek). Modified: trunk/reactos/lib/kernel32/file/volume.c _____
Modified: trunk/reactos/lib/kernel32/file/volume.c --- trunk/reactos/lib/kernel32/file/volume.c 2005-12-17 11:31:12 UTC (rev 20218) +++ trunk/reactos/lib/kernel32/file/volume.c 2005-12-17 12:05:55 UTC (rev 20219) @@ -811,7 +811,6 @@
OBJECT_ATTRIBUTES ObjectAttributes; HANDLE FileHandle; IO_STATUS_BLOCK Iosb; - PVOID Buffer; ULONG BufferLength; PMOUNTDEV_NAME MountDevName; PMOUNTMGR_MOUNT_POINT MountPoint; @@ -819,6 +818,7 @@ PMOUNTMGR_MOUNT_POINTS MountPoints; ULONG Index; PUCHAR SymbolicLinkName; + BOOL Result; NTSTATUS Status;
/* @@ -858,30 +858,32 @@ 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; + RtlFreeHeap(GetProcessHeap(), 0, MountDevName); + if (Status == STATUS_BUFFER_OVERFLOW) + { + BufferLength = sizeof(MOUNTDEV_NAME) + MountDevName->NameLength; + continue; + } + else + { + NtClose(FileHandle); + SetLastErrorByStatus(Status); + return FALSE; + } } - else if (!NT_SUCCESS(Status)) - { - RtlFreeHeap(GetProcessHeap(), 0, Buffer); - NtClose(FileHandle); - SetLastErrorByStatus(Status); - return FALSE; - } } while (!NT_SUCCESS(Status));
@@ -920,32 +922,34 @@ 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) + MountPoints, BufferLength); + if (!NT_SUCCESS(Status)) { - BufferLength = MountPoints->Size; - RtlFreeHeap(GetProcessHeap(), 0, Buffer); - continue; + 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; + } } - else if (!NT_SUCCESS(Status)) - { - RtlFreeHeap(GetProcessHeap(), 0, MountPoint); - RtlFreeHeap(GetProcessHeap(), 0, Buffer); - SetLastErrorByStatus(Status); - return FALSE; - } } while (!NT_SUCCESS(Status));
@@ -983,14 +987,16 @@ (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; } } }