diff options
Diffstat (limited to 'src/api/burn/balutil/balinfo.cpp')
-rw-r--r-- | src/api/burn/balutil/balinfo.cpp | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/src/api/burn/balutil/balinfo.cpp b/src/api/burn/balutil/balinfo.cpp index 2746f49e..d9cc9b76 100644 --- a/src/api/burn/balutil/balinfo.cpp +++ b/src/api/burn/balutil/balinfo.cpp | |||
@@ -166,7 +166,7 @@ LExit: | |||
166 | 166 | ||
167 | DAPI_(HRESULT) BalInfoAddRelatedBundleAsPackage( | 167 | DAPI_(HRESULT) BalInfoAddRelatedBundleAsPackage( |
168 | __in BAL_INFO_PACKAGES* pPackages, | 168 | __in BAL_INFO_PACKAGES* pPackages, |
169 | __in LPCWSTR wzId, | 169 | __in_z LPCWSTR wzId, |
170 | __in BOOTSTRAPPER_RELATION_TYPE relationType, | 170 | __in BOOTSTRAPPER_RELATION_TYPE relationType, |
171 | __in BOOL /*fPerMachine*/, | 171 | __in BOOL /*fPerMachine*/, |
172 | __out_opt BAL_INFO_PACKAGE** ppPackage | 172 | __out_opt BAL_INFO_PACKAGE** ppPackage |
@@ -228,6 +228,47 @@ LExit: | |||
228 | } | 228 | } |
229 | 229 | ||
230 | 230 | ||
231 | DAPI_(HRESULT) BalInfoAddUpdateBundleAsPackage( | ||
232 | __in BAL_INFO_PACKAGES* pPackages, | ||
233 | __in_z LPCWSTR wzId, | ||
234 | __in_z LPCWSTR /*wzPreviousId*/, | ||
235 | __out_opt BAL_INFO_PACKAGE** ppPackage | ||
236 | ) | ||
237 | { | ||
238 | HRESULT hr = S_OK; | ||
239 | BAL_INFO_PACKAGE* pPackage = NULL; | ||
240 | |||
241 | // Check to see if the bundle is already in the list of packages. | ||
242 | for (DWORD i = 0; i < pPackages->cPackages; ++i) | ||
243 | { | ||
244 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, wzId, -1, pPackages->rgPackages[i].sczId, -1)) | ||
245 | { | ||
246 | ExitFunction1(hr = HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS)); | ||
247 | } | ||
248 | } | ||
249 | |||
250 | // Add the update bundle as a package. | ||
251 | hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&pPackages->rgPackages), pPackages->cPackages + 1, sizeof(BAL_INFO_PACKAGE), 2); | ||
252 | ExitOnFailure(hr, "Failed to allocate memory for update bundle package information."); | ||
253 | |||
254 | pPackage = pPackages->rgPackages + pPackages->cPackages; | ||
255 | ++pPackages->cPackages; | ||
256 | |||
257 | hr = StrAllocString(&pPackage->sczId, wzId, 0); | ||
258 | ExitOnFailure(hr, "Failed to copy update bundle package id."); | ||
259 | |||
260 | pPackage->type = BAL_INFO_PACKAGE_TYPE_BUNDLE_UPDATE; | ||
261 | |||
262 | if (ppPackage) | ||
263 | { | ||
264 | *ppPackage = pPackage; | ||
265 | } | ||
266 | |||
267 | LExit: | ||
268 | return hr; | ||
269 | } | ||
270 | |||
271 | |||
231 | DAPI_(HRESULT) BalInfoFindPackageById( | 272 | DAPI_(HRESULT) BalInfoFindPackageById( |
232 | __in BAL_INFO_PACKAGES* pPackages, | 273 | __in BAL_INFO_PACKAGES* pPackages, |
233 | __in LPCWSTR wzId, | 274 | __in LPCWSTR wzId, |