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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 rc
= GetLogicalDriveStringsW(255,drives
);
61 list
= HeapAlloc(GetProcessHeap(),0,sizeof(DISKSPACELIST
));
63 list
->dwDriveCount
= 0;
69 DWORD type
= GetDriveTypeW(ptr
);
71 if (type
== DRIVE_FIXED
)
77 lstrcpyW(list
->Drives
[list
->dwDriveCount
].lpzName
,ptr
);
78 GetDiskFreeSpaceW(ptr
,§ors
,&bytes
,&clusters
,&total
);
79 list
->Drives
[list
->dwDriveCount
].dwFreeSpace
= clusters
* sectors
*
81 list
->Drives
[list
->dwDriveCount
].dwWantedSpace
= 0;
86 ptr
+=sizeof(WCHAR
)*len
;
92 /***********************************************************************
93 * SetupCreateDiskSpaceListA (SETUPAPI.@)
95 HDSKSPC WINAPI
SetupCreateDiskSpaceListA(PVOID Reserved1
, DWORD Reserved2
, UINT Flags
)
97 return SetupCreateDiskSpaceListW( Reserved1
, Reserved2
, Flags
);
101 /***********************************************************************
102 * SetupAddInstallSectionToDiskSpaceListA (SETUPAPI.@)
104 BOOL WINAPI
SetupAddInstallSectionToDiskSpaceListA(HDSKSPC DiskSpace
,
105 HINF InfHandle
, HINF LayoutInfHandle
,
106 LPSTR SectionName
, PVOID Reserved1
, UINT Reserved2
)
112 /***********************************************************************
113 * SetupQuerySpaceRequiredOnDriveA (SETUPAPI.@)
115 BOOL WINAPI
SetupQuerySpaceRequiredOnDriveA(HDSKSPC DiskSpace
,
116 LPSTR DriveSpec
, LONGLONG
* SpaceRequired
,
117 PVOID Reserved1
, UINT Reserved2
)
121 LPDISKSPACELIST list
= (LPDISKSPACELIST
)DiskSpace
;
123 static const WCHAR bkslsh
[]= {'\\',0};
125 MultiByteToWideChar(CP_ACP
,0,DriveSpec
,-1,driveW
,20);
127 lstrcatW(driveW
,bkslsh
);
129 TRACE("Looking for drive %s\n",debugstr_w(driveW
));
131 for (i
= 0; i
< list
->dwDriveCount
; i
++)
133 TRACE("checking drive %s\n",debugstr_w(list
->Drives
[i
].lpzName
));
134 if (lstrcmpW(driveW
,list
->Drives
[i
].lpzName
)==0)
137 *SpaceRequired
= list
->Drives
[i
].dwWantedSpace
;
145 /***********************************************************************
146 * SetupDestroyDiskSpaceList (SETUPAPI.@)
148 BOOL WINAPI
SetupDestroyDiskSpaceList(HDSKSPC DiskSpace
)
150 LPDISKSPACELIST list
= (LPDISKSPACELIST
)DiskSpace
;
151 HeapFree(GetProcessHeap(),0,list
);