Module: wine Branch: master Commit: 3902efc9cb088d8623ff993613d0b091ffe56d18 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3902efc9cb088d8623ff993613...
Author: Andrew Nguyen anguyen@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)