#include "setupapi_private.h"
-WINE_DEFAULT_DEBUG_CHANNEL(setupapi);
-
typedef struct {
WCHAR lpzName[20];
LONGLONG dwFreeSpace;
/***********************************************************************
- * SetupCreateDiskSpaceListW (SETUPAPI.@)
+ * SetupCreateDiskSpaceListW (SETUPAPI.@)
*/
HDSKSPC WINAPI SetupCreateDiskSpaceListW(PVOID Reserved1, DWORD Reserved2, UINT Flags)
{
WCHAR *ptr;
LPDISKSPACELIST list=NULL;
+ TRACE("(%p, %u, 0x%08x)\n", Reserved1, Reserved2, Flags);
+
+ if (Reserved1 || Reserved2 || Flags & ~SPDSL_IGNORE_DISK)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return NULL;
+ }
+
rc = GetLogicalDriveStringsW(255,drives);
if (rc == 0)
}
ptr += lstrlenW(ptr) + 1;
}
- return (HANDLE)list;
+ return list;
}
return SetupCreateDiskSpaceListW( Reserved1, Reserved2, Flags );
}
+/***********************************************************************
+ * SetupDuplicateDiskSpaceListW (SETUPAPI.@)
+ */
+HDSKSPC WINAPI SetupDuplicateDiskSpaceListW(HDSKSPC DiskSpace, PVOID Reserved1, DWORD Reserved2, UINT Flags)
+{
+ DISKSPACELIST *list_copy, *list_original = DiskSpace;
+
+ if (Reserved1 || Reserved2 || Flags)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return NULL;
+ }
+
+ if (!DiskSpace)
+ {
+ SetLastError(ERROR_INVALID_HANDLE);
+ return NULL;
+ }
+
+ list_copy = HeapAlloc(GetProcessHeap(), 0, sizeof(DISKSPACELIST));
+ if (!list_copy)
+ {
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ return NULL;
+ }
+
+ *list_copy = *list_original;
+
+ return list_copy;
+}
+
+/***********************************************************************
+ * SetupDuplicateDiskSpaceListA (SETUPAPI.@)
+ */
+HDSKSPC WINAPI SetupDuplicateDiskSpaceListA(HDSKSPC DiskSpace, PVOID Reserved1, DWORD Reserved2, UINT Flags)
+{
+ return SetupDuplicateDiskSpaceListW(DiskSpace, Reserved1, Reserved2, Flags);
+}
/***********************************************************************
* SetupAddInstallSectionToDiskSpaceListA (SETUPAPI.@)
}
/***********************************************************************
-* 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 = (LPDISKSPACELIST)DiskSpace;
+ LPDISKSPACELIST list = DiskSpace;
BOOL rc = FALSE;
static const WCHAR bkslsh[]= {'\\',0};
- MultiByteToWideChar(CP_ACP,0,DriveSpec,-1,driveW,20);
+ if (!DiskSpace)
+ {
+ SetLastError(ERROR_INVALID_HANDLE);
+ return FALSE;
+ }
+
+ if (!DriveSpec)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ driveW = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(DriveSpec) + 2) * sizeof(WCHAR));
+ if (!driveW)
+ {
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ return FALSE;
+ }
+ lstrcpyW(driveW,DriveSpec);
lstrcatW(driveW,bkslsh);
TRACE("Looking for drive %s\n",debugstr_w(driveW));
-
+
for (i = 0; i < list->dwDriveCount; i++)
{
TRACE("checking drive %s\n",debugstr_w(list->Drives[i].lpzName));
}
}
+ HeapFree(GetProcessHeap(), 0, driveW);
+
+ if (!rc) SetLastError(ERROR_INVALID_DRIVE);
return rc;
}
+/***********************************************************************
+* SetupQuerySpaceRequiredOnDriveA (SETUPAPI.@)
+*/
+BOOL WINAPI SetupQuerySpaceRequiredOnDriveA(HDSKSPC DiskSpace,
+ LPCSTR DriveSpec, LONGLONG *SpaceRequired,
+ PVOID Reserved1, UINT Reserved2)
+{
+ DWORD len;
+ LPWSTR DriveSpecW;
+ BOOL ret;
+
+ /* The parameter validation checks are in a different order from the
+ * Unicode variant of SetupQuerySpaceRequiredOnDrive. */
+ if (!DriveSpec)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ if (!DiskSpace)
+ {
+ SetLastError(ERROR_INVALID_HANDLE);
+ return FALSE;
+ }
+
+ 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.@)
*/
HeapFree(GetProcessHeap(),0,list);
return TRUE;
}
+
+/***********************************************************************
+* SetupAddToDiskSpaceListA (SETUPAPI.@)
+*/
+BOOL WINAPI SetupAddToDiskSpaceListA(HDSKSPC diskspace, PCSTR targetfile,
+ LONGLONG filesize, UINT operation,
+ PVOID reserved1, UINT reserved2)
+{
+ FIXME(": stub\n");
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+* SetupAddToDiskSpaceListW (SETUPAPI.@)
+*/
+BOOL WINAPI SetupAddToDiskSpaceListW(HDSKSPC diskspace, PCWSTR targetfile,
+ LONGLONG filesize, UINT operation,
+ PVOID reserved1, UINT reserved2)
+{
+ FIXME(": stub\n");
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}