From 3902efc9cb088d8623ff993613d0b091ffe56d18 Mon Sep 17 00:00:00 2001 From: Andrew Nguyen Date: Tue, 7 Sep 2010 05:00:39 -0500 Subject: [PATCH] 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 61e20dec015..c87d4b60db2 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,9 +150,43 @@ 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.@) */ diff --git a/dlls/setupapi/setupapi.spec b/dlls/setupapi/setupapi.spec index a3dd4b0f4cf..bb96c1931c8 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)