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