Hans Leidekker : kernel32: Improve GetVolumePathName stub.

Alexandre Julliard julliard at winehq.org
Thu Apr 23 11:27:24 CDT 2009


Module: wine
Branch: master
Commit: 9b9d8dc3e89f17b88bcc62e51b111475361e5940
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9b9d8dc3e89f17b88bcc62e51b111475361e5940

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Wed Apr 22 12:47:06 2009 +0200

kernel32: Improve GetVolumePathName stub.

---

 dlls/kernel32/volume.c |   26 +++++++++++++++++++++++---
 1 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/dlls/kernel32/volume.c b/dlls/kernel32/volume.c
index 9addeab..31490b9 100644
--- a/dlls/kernel32/volume.c
+++ b/dlls/kernel32/volume.c
@@ -1406,9 +1406,19 @@ BOOL WINAPI GetDiskFreeSpaceA( LPCSTR root, LPDWORD cluster_sectors,
  */
 BOOL WINAPI GetVolumePathNameA(LPCSTR filename, LPSTR volumepathname, DWORD buflen)
 {
+    BOOL ret;
+    WCHAR *filenameW = NULL, *volumeW;
+
     FIXME("(%s, %p, %d), stub!\n", debugstr_a(filename), volumepathname, buflen);
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return FALSE;
+
+    if (filename && !(filenameW = FILE_name_AtoW( filename, FALSE ))) return FALSE;
+    if (!(volumeW = HeapAlloc( GetProcessHeap(), 0, buflen * sizeof(WCHAR) ))) return FALSE;
+
+    if ((ret = GetVolumePathNameW( filenameW, volumeW, buflen )))
+        FILE_name_WtoA( volumeW, -1, volumepathname, buflen );
+
+    HeapFree( GetProcessHeap(), 0, volumeW );
+    return ret;
 }
 
 /***********************************************************************
@@ -1416,8 +1426,18 @@ BOOL WINAPI GetVolumePathNameA(LPCSTR filename, LPSTR volumepathname, DWORD bufl
  */
 BOOL WINAPI GetVolumePathNameW(LPCWSTR filename, LPWSTR volumepathname, DWORD buflen)
 {
+    const WCHAR *p = filename;
+
     FIXME("(%s, %p, %d), stub!\n", debugstr_w(filename), volumepathname, buflen);
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+
+    if (p && tolowerW(p[0]) >= 'a' && tolowerW(p[0]) <= 'z' && p[1] ==':' && p[2] == '\\' && buflen >= 4)
+    {
+        volumepathname[0] = p[0];
+        volumepathname[1] = ':';
+        volumepathname[2] = '\\';
+        volumepathname[3] = 0;
+        return TRUE;
+    }
     return FALSE;
 }
 




More information about the wine-cvs mailing list