2 * SetupAPI DiskSpace functions
4 * Copyright 2004 CodeWeavers (Aric Stewart)
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
30 #include "wine/debug.h"
32 WINE_DEFAULT_DEBUG_CHANNEL(setupapi);
37 LONGLONG dwWantedSpace;
38 } DRIVE_ENTRY, *LPDRIVE_ENTRY;
42 DRIVE_ENTRY Drives[26];
43 } DISKSPACELIST, *LPDISKSPACELIST;
46 /***********************************************************************
47 * SetupCreateDiskSpaceListW (SETUPAPI.@)
49 HDSKSPC WINAPI SetupCreateDiskSpaceListW(PVOID Reserved1, DWORD Reserved2, UINT Flags)
54 LPDISKSPACELIST list=NULL;
56 TRACE("(%p, %u, 0x%08x)\n", Reserved1, Reserved2, Flags);
58 if (Reserved1 || Reserved2 || Flags & ~SPDSL_IGNORE_DISK)
60 SetLastError(ERROR_INVALID_PARAMETER);
64 rc = GetLogicalDriveStringsW(255,drives);
69 list = HeapAlloc(GetProcessHeap(),0,sizeof(DISKSPACELIST));
71 list->dwDriveCount = 0;
77 DWORD type = GetDriveTypeW(ptr);
78 if (type == DRIVE_FIXED)
84 lstrcpyW(list->Drives[list->dwDriveCount].lpzName,ptr);
85 GetDiskFreeSpaceW(ptr,§ors,&bytes,&clusters,&total);
86 list->Drives[list->dwDriveCount].dwFreeSpace = clusters * sectors *
88 list->Drives[list->dwDriveCount].dwWantedSpace = 0;
91 ptr += lstrlenW(ptr) + 1;
97 /***********************************************************************
98 * SetupCreateDiskSpaceListA (SETUPAPI.@)
100 HDSKSPC WINAPI SetupCreateDiskSpaceListA(PVOID Reserved1, DWORD Reserved2, UINT Flags)
102 return SetupCreateDiskSpaceListW( Reserved1, Reserved2, Flags );
106 /***********************************************************************
107 * SetupAddInstallSectionToDiskSpaceListA (SETUPAPI.@)
109 BOOL WINAPI SetupAddInstallSectionToDiskSpaceListA(HDSKSPC DiskSpace,
110 HINF InfHandle, HINF LayoutInfHandle,
111 LPCSTR SectionName, PVOID Reserved1, UINT Reserved2)
117 /***********************************************************************
118 * SetupQuerySpaceRequiredOnDriveA (SETUPAPI.@)
120 BOOL WINAPI SetupQuerySpaceRequiredOnDriveA(HDSKSPC DiskSpace,
121 LPCSTR DriveSpec, LONGLONG* SpaceRequired,
122 PVOID Reserved1, UINT Reserved2)
126 LPDISKSPACELIST list = DiskSpace;
128 static const WCHAR bkslsh[]= {'\\',0};
130 MultiByteToWideChar(CP_ACP,0,DriveSpec,-1,driveW,20);
132 lstrcatW(driveW,bkslsh);
134 TRACE("Looking for drive %s\n",debugstr_w(driveW));
136 for (i = 0; i < list->dwDriveCount; i++)
138 TRACE("checking drive %s\n",debugstr_w(list->Drives[i].lpzName));
139 if (lstrcmpW(driveW,list->Drives[i].lpzName)==0)
142 *SpaceRequired = list->Drives[i].dwWantedSpace;
150 /***********************************************************************
151 * SetupDestroyDiskSpaceList (SETUPAPI.@)
153 BOOL WINAPI SetupDestroyDiskSpaceList(HDSKSPC DiskSpace)
155 LPDISKSPACELIST list = DiskSpace;
156 HeapFree(GetProcessHeap(),0,list);