- Fix GetLogicalDriveStringsA/W. +5 passed tests
authorDmitry Chapyshev <dmitry@reactos.org>
Sun, 28 Dec 2008 15:38:17 +0000 (15:38 +0000)
committerDmitry Chapyshev <dmitry@reactos.org>
Sun, 28 Dec 2008 15:38:17 +0000 (15:38 +0000)
- Add params check for GetVolumeNameForVolumeMountPointW

svn path=/trunk/; revision=38428

reactos/dll/win32/kernel32/file/volume.c

index 7061f91..bdafa17 100644 (file)
@@ -81,7 +81,7 @@ InternalOpenDirW(LPCWSTR DirName,
 /*
  * @implemented
  */
-/* Synced to Wine-? */
+/* Synced to Wine-2008/12/28 */
 DWORD WINAPI
 GetLogicalDriveStringsA(DWORD nBufferLength,
                        LPSTR lpBuffer)
@@ -98,8 +98,8 @@ GetLogicalDriveStringsA(DWORD nBufferLength,
      }
 
 
-   if (count * 4 <= nBufferLength)
-     {
+   if ((count * 4) + 1 > nBufferLength) return ((count * 4) + 1);
+
        LPSTR p = lpBuffer;
 
        for (drive = 0; drive < MAX_DOS_DRIVES; drive++)
@@ -111,7 +111,7 @@ GetLogicalDriveStringsA(DWORD nBufferLength,
             *p++ = '\0';
          }
        *p = '\0';
-     }
+
     return (count * 4);
 }
 
@@ -119,7 +119,7 @@ GetLogicalDriveStringsA(DWORD nBufferLength,
 /*
  * @implemented
  */
-/* Synced to Wine-? */
+/* Synced to Wine-2008/12/28 */
 DWORD WINAPI
 GetLogicalDriveStringsW(DWORD nBufferLength,
                        LPWSTR lpBuffer)
@@ -135,19 +135,19 @@ GetLogicalDriveStringsW(DWORD nBufferLength,
           count++;
      }
 
-    if (count * 4 <=  nBufferLength)
-    {
-        LPWSTR p = lpBuffer;
-        for (drive = 0; drive < MAX_DOS_DRIVES; drive++)
-            if (dwDriveMap & (1<<drive))
-            {
-                *p++ = (WCHAR)('A' + drive);
-                *p++ = (WCHAR)':';
-                *p++ = (WCHAR)'\\';
-                *p++ = (WCHAR)'\0';
-            }
-        *p = (WCHAR)'\0';
-    }
+    if ((count * 4) + 1 > nBufferLength) return ((count * 4) + 1);
+
+    LPWSTR p = lpBuffer;
+    for (drive = 0; drive < MAX_DOS_DRIVES; drive++)
+        if (dwDriveMap & (1<<drive))
+        {
+            *p++ = (WCHAR)('A' + drive);
+            *p++ = (WCHAR)':';
+            *p++ = (WCHAR)'\\';
+            *p++ = (WCHAR)'\0';
+        }
+    *p = (WCHAR)'\0';
+
     return (count * 4);
 }
 
@@ -872,6 +872,12 @@ GetVolumeNameForVolumeMountPointW(
    BOOL Result;
    NTSTATUS Status;
 
+   if (!VolumeMountPoint || !VolumeMountPoint[0])
+   {
+       SetLastError(ERROR_PATH_NOT_FOUND);
+       return FALSE;
+   }
+
    /*
     * First step is to convert the passed volume mount point name to
     * an NT acceptable name.