aboutsummaryrefslogtreecommitdiff
path: root/src/engine/search.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2020-03-29 19:16:30 +1000
committerSean Hall <r.sean.hall@gmail.com>2020-03-30 21:40:34 +1000
commit1a0190bd31953a5ffb68cac75866328dccbf03f2 (patch)
tree56a063bc5ac84b72b62baa71b590d2e26379cf37 /src/engine/search.cpp
parent0354a00e74492ad8d930c5bf499bc8606e48b1c9 (diff)
downloadwix-1a0190bd31953a5ffb68cac75866328dccbf03f2.tar.gz
wix-1a0190bd31953a5ffb68cac75866328dccbf03f2.tar.bz2
wix-1a0190bd31953a5ffb68cac75866328dccbf03f2.zip
Add support for ExtensionSearches.
Diffstat (limited to 'src/engine/search.cpp')
-rw-r--r--src/engine/search.cpp31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/engine/search.cpp b/src/engine/search.cpp
index c50790fd..763286fd 100644
--- a/src/engine/search.cpp
+++ b/src/engine/search.cpp
@@ -45,12 +45,16 @@ static HRESULT MsiFeatureSearch(
45 __in BURN_SEARCH* pSearch, 45 __in BURN_SEARCH* pSearch,
46 __in BURN_VARIABLES* pVariables 46 __in BURN_VARIABLES* pVariables
47 ); 47 );
48static HRESULT PerformExtensionSearch(
49 __in BURN_SEARCH* pSearch
50 );
48 51
49 52
50// function definitions 53// function definitions
51 54
52extern "C" HRESULT SearchesParseFromXml( 55extern "C" HRESULT SearchesParseFromXml(
53 __in BURN_SEARCHES* pSearches, 56 __in BURN_SEARCHES* pSearches,
57 __in BURN_EXTENSIONS* pBurnExtensions,
54 __in IXMLDOMNode* pixnBundle 58 __in IXMLDOMNode* pixnBundle
55 ) 59 )
56{ 60{
@@ -62,7 +66,7 @@ extern "C" HRESULT SearchesParseFromXml(
62 LPWSTR scz = NULL; 66 LPWSTR scz = NULL;
63 67
64 // select search nodes 68 // select search nodes
65 hr = XmlSelectNodes(pixnBundle, L"DirectorySearch|FileSearch|RegistrySearch|MsiComponentSearch|MsiProductSearch|MsiFeatureSearch", &pixnNodes); 69 hr = XmlSelectNodes(pixnBundle, L"DirectorySearch|FileSearch|RegistrySearch|MsiComponentSearch|MsiProductSearch|MsiFeatureSearch|ExtensionSearch", &pixnNodes);
66 ExitOnFailure(hr, "Failed to select search nodes."); 70 ExitOnFailure(hr, "Failed to select search nodes.");
67 71
68 // get search node count 72 // get search node count
@@ -373,6 +377,17 @@ extern "C" HRESULT SearchesParseFromXml(
373 ExitOnFailure(hr, "Invalid value for @Type: %ls", scz); 377 ExitOnFailure(hr, "Invalid value for @Type: %ls", scz);
374 } 378 }
375 } 379 }
380 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"ExtensionSearch", -1))
381 {
382 pSearch->Type = BURN_SEARCH_TYPE_EXTENSION;
383
384 // @ExtensionId
385 hr = XmlGetAttributeEx(pixnNode, L"ExtensionId", &scz);
386 ExitOnFailure(hr, "Failed to get @ExtensionId.");
387
388 hr = BurnExtensionFindById(pBurnExtensions, scz, &pSearch->ExtensionSearch.pExtension);
389 ExitOnFailure(hr, "Failed to find extension '%ls' for search '%ls'", scz, pSearch->sczKey);
390 }
376 else 391 else
377 { 392 {
378 hr = E_UNEXPECTED; 393 hr = E_UNEXPECTED;
@@ -477,6 +492,9 @@ extern "C" HRESULT SearchesExecute(
477 case BURN_SEARCH_TYPE_MSI_FEATURE: 492 case BURN_SEARCH_TYPE_MSI_FEATURE:
478 hr = MsiFeatureSearch(pSearch, pVariables); 493 hr = MsiFeatureSearch(pSearch, pVariables);
479 break; 494 break;
495 case BURN_SEARCH_TYPE_EXTENSION:
496 hr = PerformExtensionSearch(pSearch);
497 break;
480 default: 498 default:
481 hr = E_UNEXPECTED; 499 hr = E_UNEXPECTED;
482 } 500 }
@@ -1193,3 +1211,14 @@ static HRESULT MsiFeatureSearch(
1193 1211
1194 return hr; 1212 return hr;
1195} 1213}
1214
1215static HRESULT PerformExtensionSearch(
1216 __in BURN_SEARCH* pSearch
1217 )
1218{
1219 HRESULT hr = S_OK;
1220
1221 hr = BurnExtensionPerformSearch(pSearch->ExtensionSearch.pExtension, pSearch->sczKey, pSearch->sczVariable);
1222
1223 return hr;
1224}