kernel32: Also report empty drives as available in GetLogicalDrives

Alexandre Goujon ale.goujon at gmail.com
Sun Jul 15 14:57:56 CDT 2012


---
 dlls/kernel32/volume.c |   13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/dlls/kernel32/volume.c b/dlls/kernel32/volume.c
index 8377e41..67e2eb1 100644
--- a/dlls/kernel32/volume.c
+++ b/dlls/kernel32/volume.c
@@ -1441,19 +1441,26 @@ DWORD WINAPI GetLogicalDrives(void)
     DWORD ret = 0;
     int i;
 
-    if (!(buffer = HeapAlloc( GetProcessHeap(), 0, strlen(config_dir) + sizeof("/dosdevices/a:") )))
+    if (!(buffer = HeapAlloc( GetProcessHeap(), 0, strlen(config_dir) + sizeof("/dosdevices/a::") )))
     {
         SetLastError( ERROR_NOT_ENOUGH_MEMORY );
         return 0;
     }
     strcpy( buffer, config_dir );
-    strcat( buffer, "/dosdevices/a:" );
-    dev = buffer + strlen(buffer) - 2;
+    strcat( buffer, "/dosdevices/a::" );
+    dev = buffer + strlen(buffer) - 3;
 
     for (i = 0; i < 26; i++)
     {
         *dev = 'a' + i;
+        dev[2] = 0;
         if (!stat( buffer, &st )) ret |= (1 << i);
+        /* Windows also report empty drives as available */
+        else
+        {
+            dev[2] = ':';
+            if (!stat( buffer, &st )) ret |= (1 << i);
+        }
     }
     HeapFree( GetProcessHeap(), 0, buffer );
     return ret;
-- 
1.7.9.5




More information about the wine-patches mailing list