Andrew Nguyen : setupapi: Implement SetupQuerySpaceRequiredOnDriveW.

Alexandre Julliard julliard at winehq.org
Tue Sep 7 11:22:56 CDT 2010


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

Author: Andrew Nguyen <anguyen at codeweavers.com>
Date:   Tue Sep  7 05:00:39 2010 -0500

setupapi: Implement SetupQuerySpaceRequiredOnDriveW.

---

 dlls/setupapi/diskspace.c   |   50 ++++++++++++++++++++++++++++++++++++++----
 dlls/setupapi/setupapi.spec |    2 +-
 2 files changed, 46 insertions(+), 6 deletions(-)

diff --git a/dlls/setupapi/diskspace.c b/dlls/setupapi/diskspace.c
index 61e20de..c87d4b6 100644
--- a/dlls/setupapi/diskspace.c
+++ b/dlls/setupapi/diskspace.c
@@ -115,20 +115,26 @@ BOOL WINAPI SetupAddInstallSectionToDiskSpaceListA(HDSKSPC DiskSpace,
 }
 
 /***********************************************************************
-*		SetupQuerySpaceRequiredOnDriveA  (SETUPAPI.@)
+*		SetupQuerySpaceRequiredOnDriveW  (SETUPAPI.@)
 */
-BOOL WINAPI SetupQuerySpaceRequiredOnDriveA(HDSKSPC DiskSpace, 
-                        LPCSTR DriveSpec, LONGLONG* SpaceRequired, 
+BOOL WINAPI SetupQuerySpaceRequiredOnDriveW(HDSKSPC DiskSpace,
+                        LPCWSTR DriveSpec, LONGLONG *SpaceRequired,
                         PVOID Reserved1, UINT Reserved2)
 {
-    WCHAR driveW[20];
+    WCHAR *driveW;
     unsigned int i;
     LPDISKSPACELIST list = DiskSpace;
     BOOL rc = FALSE;
     static const WCHAR bkslsh[]= {'\\',0};
 
-    MultiByteToWideChar(CP_ACP,0,DriveSpec,-1,driveW,20);
+    driveW = HeapAlloc(GetProcessHeap(), 0, lstrlenW(DriveSpec) + 2);
+    if (!driveW)
+    {
+        SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+        return FALSE;
+    }
 
+    lstrcpyW(driveW,DriveSpec);
     lstrcatW(driveW,bkslsh);
 
     TRACE("Looking for drive %s\n",debugstr_w(driveW));
@@ -144,10 +150,44 @@ BOOL WINAPI SetupQuerySpaceRequiredOnDriveA(HDSKSPC DiskSpace,
         }
     }
 
+    HeapFree(GetProcessHeap(), 0, driveW);
+
     return rc;
 }
 
 /***********************************************************************
+*		SetupQuerySpaceRequiredOnDriveA  (SETUPAPI.@)
+*/
+BOOL WINAPI SetupQuerySpaceRequiredOnDriveA(HDSKSPC DiskSpace,
+                        LPCSTR DriveSpec, LONGLONG *SpaceRequired,
+                        PVOID Reserved1, UINT Reserved2)
+{
+    LPWSTR DriveSpecW = NULL;
+    BOOL ret;
+
+    if (DriveSpec)
+    {
+        DWORD len = MultiByteToWideChar(CP_ACP, 0, DriveSpec, -1, NULL, 0);
+
+        DriveSpecW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+        if (!DriveSpecW)
+        {
+            SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+            return FALSE;
+        }
+
+        MultiByteToWideChar(CP_ACP, 0, DriveSpec, -1, DriveSpecW, len);
+    }
+
+    ret = SetupQuerySpaceRequiredOnDriveW(DiskSpace, DriveSpecW, SpaceRequired,
+                                          Reserved1, Reserved2);
+
+    HeapFree(GetProcessHeap(), 0, DriveSpecW);
+
+    return ret;
+}
+
+/***********************************************************************
 *		SetupDestroyDiskSpaceList  (SETUPAPI.@)
 */
 BOOL WINAPI SetupDestroyDiskSpaceList(HDSKSPC DiskSpace)
diff --git a/dlls/setupapi/setupapi.spec b/dlls/setupapi/setupapi.spec
index a3dd4b0..bb96c19 100644
--- a/dlls/setupapi/setupapi.spec
+++ b/dlls/setupapi/setupapi.spec
@@ -482,7 +482,7 @@
 @ stub SetupQuerySourceListA
 @ stub SetupQuerySourceListW
 @ stdcall SetupQuerySpaceRequiredOnDriveA(long str ptr ptr long)
-@ stub SetupQuerySpaceRequiredOnDriveW
+@ stdcall SetupQuerySpaceRequiredOnDriveW(long wstr ptr ptr long)
 @ stdcall SetupQueueCopyA(long str str str str str str str long)
 @ stdcall SetupQueueCopyIndirectA(ptr)
 @ stdcall SetupQueueCopyIndirectW(ptr)




More information about the wine-cvs mailing list