[ros-diffs] [navaraf] 20219: Minor cleanup of GetVolumeNameForVolumeMountPointW and fix some incorrect return codes (spotted by w3seek).

navaraf at svn.reactos.com navaraf at svn.reactos.com
Sat Dec 17 13:06:08 CET 2005


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;
          }
       }
    }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-diffs/attachments/20051217/e65bf7b5/attachment.html


More information about the Ros-diffs mailing list