[ros-diffs] [dchapyshev] 38428: - Fix GetLogicalDriveStringsA/W. +5 passed tests - Add params check for GetVolumeNameForVolumeMountPointW

dchapyshev at svn.reactos.org dchapyshev at svn.reactos.org
Sun Dec 28 16:38:17 CET 2008


Author: dchapyshev
Date: Sun Dec 28 09:38:17 2008
New Revision: 38428

URL: http://svn.reactos.org/svn/reactos?rev=38428&view=rev
Log:
- Fix GetLogicalDriveStringsA/W. +5 passed tests
- Add params check for GetVolumeNameForVolumeMountPointW

Modified:
    trunk/reactos/dll/win32/kernel32/file/volume.c

Modified: trunk/reactos/dll/win32/kernel32/file/volume.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/file/volume.c?rev=38428&r1=38427&r2=38428&view=diff
==============================================================================
--- trunk/reactos/dll/win32/kernel32/file/volume.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/file/volume.c [iso-8859-1] Sun Dec 28 09:38:17 2008
@@ -81,7 +81,7 @@
 /*
  * @implemented
  */
-/* Synced to Wine-? */
+/* Synced to Wine-2008/12/28 */
 DWORD WINAPI
 GetLogicalDriveStringsA(DWORD nBufferLength,
 			LPSTR lpBuffer)
@@ -98,8 +98,8 @@
      }
 
 
-   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 @@
 	     *p++ = '\0';
 	  }
 	*p = '\0';
-     }
+
     return (count * 4);
 }
 
@@ -119,7 +119,7 @@
 /*
  * @implemented
  */
-/* Synced to Wine-? */
+/* Synced to Wine-2008/12/28 */
 DWORD WINAPI
 GetLogicalDriveStringsW(DWORD nBufferLength,
 			LPWSTR lpBuffer)
@@ -135,19 +135,19 @@
 	   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);
 }
 
@@ -871,6 +871,12 @@
    PUCHAR SymbolicLinkName;
    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



More information about the Ros-diffs mailing list