summaryrefslogtreecommitdiff
path: root/src/burn/engine/EngineForExtension.cpp
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2021-04-22 17:06:54 -0700
committerRob Mensching <rob@firegiant.com>2021-04-29 16:36:06 -0700
commitaf10c45d7b3a44af0b461a557847fe03263dcc10 (patch)
tree6a5c1532304782c36ffe4200b38f3afb76789a43 /src/burn/engine/EngineForExtension.cpp
parent9c2aed97299fb96aeee3f1471ce40225437aaecf (diff)
downloadwix-af10c45d7b3a44af0b461a557847fe03263dcc10.tar.gz
wix-af10c45d7b3a44af0b461a557847fe03263dcc10.tar.bz2
wix-af10c45d7b3a44af0b461a557847fe03263dcc10.zip
Move burn into burn
Diffstat (limited to 'src/burn/engine/EngineForExtension.cpp')
-rw-r--r--src/burn/engine/EngineForExtension.cpp263
1 files changed, 263 insertions, 0 deletions
diff --git a/src/burn/engine/EngineForExtension.cpp b/src/burn/engine/EngineForExtension.cpp
new file mode 100644
index 00000000..2e1c98fd
--- /dev/null
+++ b/src/burn/engine/EngineForExtension.cpp
@@ -0,0 +1,263 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3#include "precomp.h"
4
5
6static HRESULT BEEngineEscapeString(
7 __in BURN_EXTENSION_ENGINE_CONTEXT* /*pContext*/,
8 __in const LPVOID pvArgs,
9 __inout LPVOID pvResults
10 )
11{
12 HRESULT hr = S_OK;
13 ValidateMessageArgs(hr, pvArgs, BUNDLE_EXTENSION_ENGINE_ESCAPESTRING_ARGS, pArgs);
14 ValidateMessageResults(hr, pvResults, BUNDLE_EXTENSION_ENGINE_ESCAPESTRING_RESULTS, pResults);
15
16 hr = ExternalEngineEscapeString(pArgs->wzIn, pResults->wzOut, &pResults->cchOut);
17
18LExit:
19 return hr;
20}
21
22static HRESULT BEEngineEvaluateCondition(
23 __in BURN_EXTENSION_ENGINE_CONTEXT* pContext,
24 __in const LPVOID pvArgs,
25 __inout LPVOID pvResults
26 )
27{
28 HRESULT hr = S_OK;
29 ValidateMessageArgs(hr, pvArgs, BUNDLE_EXTENSION_ENGINE_EVALUATECONDITION_ARGS, pArgs);
30 ValidateMessageResults(hr, pvResults, BUNDLE_EXTENSION_ENGINE_EVALUATECONDITION_RESULTS, pResults);
31
32 hr = ExternalEngineEvaluateCondition(pContext->pEngineState, pArgs->wzCondition, &pResults->f);
33
34LExit:
35 return hr;
36}
37
38static HRESULT BEEngineFormatString(
39 __in BURN_EXTENSION_ENGINE_CONTEXT* pContext,
40 __in const LPVOID pvArgs,
41 __inout LPVOID pvResults
42 )
43{
44 HRESULT hr = S_OK;
45 ValidateMessageArgs(hr, pvArgs, BUNDLE_EXTENSION_ENGINE_FORMATSTRING_ARGS, pArgs);
46 ValidateMessageResults(hr, pvResults, BUNDLE_EXTENSION_ENGINE_FORMATSTRING_RESULTS, pResults);
47
48 hr = ExternalEngineFormatString(pContext->pEngineState, pArgs->wzIn, pResults->wzOut, &pResults->cchOut);
49
50LExit:
51 return hr;
52}
53
54static HRESULT BEEngineGetVariableNumeric(
55 __in BURN_EXTENSION_ENGINE_CONTEXT* pContext,
56 __in const LPVOID pvArgs,
57 __inout LPVOID pvResults
58 )
59{
60 HRESULT hr = S_OK;
61 ValidateMessageArgs(hr, pvArgs, BUNDLE_EXTENSION_ENGINE_GETVARIABLENUMERIC_ARGS, pArgs);
62 ValidateMessageResults(hr, pvResults, BUNDLE_EXTENSION_ENGINE_GETVARIABLENUMERIC_RESULTS, pResults);
63
64 hr = ExternalEngineGetVariableNumeric(pContext->pEngineState, pArgs->wzVariable, &pResults->llValue);
65
66LExit:
67 return hr;
68}
69
70static HRESULT BEEngineGetVariableString(
71 __in BURN_EXTENSION_ENGINE_CONTEXT* pContext,
72 __in const LPVOID pvArgs,
73 __inout LPVOID pvResults
74 )
75{
76 HRESULT hr = S_OK;
77 ValidateMessageArgs(hr, pvArgs, BUNDLE_EXTENSION_ENGINE_GETVARIABLESTRING_ARGS, pArgs);
78 ValidateMessageResults(hr, pvResults, BUNDLE_EXTENSION_ENGINE_GETVARIABLESTRING_RESULTS, pResults);
79
80 hr = ExternalEngineGetVariableString(pContext->pEngineState, pArgs->wzVariable, pResults->wzValue, &pResults->cchValue);
81
82LExit:
83 return hr;
84}
85
86static HRESULT BEEngineGetVariableVersion(
87 __in BURN_EXTENSION_ENGINE_CONTEXT* pContext,
88 __in const LPVOID pvArgs,
89 __inout LPVOID pvResults
90 )
91{
92 HRESULT hr = S_OK;
93 ValidateMessageArgs(hr, pvArgs, BUNDLE_EXTENSION_ENGINE_GETVARIABLEVERSION_ARGS, pArgs);
94 ValidateMessageResults(hr, pvResults, BUNDLE_EXTENSION_ENGINE_GETVARIABLEVERSION_RESULTS, pResults);
95
96 hr = ExternalEngineGetVariableVersion(pContext->pEngineState, pArgs->wzVariable, pResults->wzValue, &pResults->cchValue);
97
98LExit:
99 return hr;
100}
101
102static HRESULT BEEngineLog(
103 __in BURN_EXTENSION_ENGINE_CONTEXT* /*pContext*/,
104 __in const LPVOID pvArgs,
105 __inout LPVOID pvResults
106 )
107{
108 HRESULT hr = S_OK;
109 REPORT_LEVEL rl = REPORT_NONE;
110 ValidateMessageArgs(hr, pvArgs, BUNDLE_EXTENSION_ENGINE_LOG_ARGS, pArgs);
111 ValidateMessageResults(hr, pvResults, BUNDLE_EXTENSION_ENGINE_LOG_RESULTS, pResults);
112
113 switch (pArgs->level)
114 {
115 case BUNDLE_EXTENSION_LOG_LEVEL_STANDARD:
116 rl = REPORT_STANDARD;
117 break;
118
119 case BUNDLE_EXTENSION_LOG_LEVEL_VERBOSE:
120 rl = REPORT_VERBOSE;
121 break;
122
123 case BUNDLE_EXTENSION_LOG_LEVEL_DEBUG:
124 rl = REPORT_DEBUG;
125 break;
126
127 case BUNDLE_EXTENSION_LOG_LEVEL_ERROR:
128 rl = REPORT_ERROR;
129 break;
130
131 default:
132 ExitFunction1(hr = E_INVALIDARG);
133 }
134
135 hr = ExternalEngineLog(rl, pArgs->wzMessage);
136 ExitOnFailure(hr, "Failed to log Bundle Extension message.");
137
138LExit:
139 return hr;
140}
141
142static HRESULT BEEngineSetVariableNumeric(
143 __in BURN_EXTENSION_ENGINE_CONTEXT* pContext,
144 __in const LPVOID pvArgs,
145 __inout LPVOID pvResults
146 )
147{
148 HRESULT hr = S_OK;
149 ValidateMessageArgs(hr, pvArgs, BUNDLE_EXTENSION_ENGINE_SETVARIABLENUMERIC_ARGS, pArgs);
150 ValidateMessageResults(hr, pvResults, BUNDLE_EXTENSION_ENGINE_SETVARIABLENUMERIC_RESULTS, pResults);
151
152 hr = ExternalEngineSetVariableNumeric(pContext->pEngineState, pArgs->wzVariable, pArgs->llValue);
153
154LExit:
155 return hr;
156}
157
158static HRESULT BEEngineSetVariableString(
159 __in BURN_EXTENSION_ENGINE_CONTEXT* pContext,
160 __in const LPVOID pvArgs,
161 __inout LPVOID pvResults
162 )
163{
164 HRESULT hr = S_OK;
165 ValidateMessageArgs(hr, pvArgs, BUNDLE_EXTENSION_ENGINE_SETVARIABLESTRING_ARGS, pArgs);
166 ValidateMessageResults(hr, pvResults, BUNDLE_EXTENSION_ENGINE_SETVARIABLESTRING_RESULTS, pResults);
167
168 hr = ExternalEngineSetVariableString(pContext->pEngineState, pArgs->wzVariable, pArgs->wzValue, pArgs->fFormatted);
169
170LExit:
171 return hr;
172}
173
174static HRESULT BEEngineSetVariableVersion(
175 __in BURN_EXTENSION_ENGINE_CONTEXT* pContext,
176 __in const LPVOID pvArgs,
177 __inout LPVOID pvResults
178 )
179{
180 HRESULT hr = S_OK;
181 ValidateMessageArgs(hr, pvArgs, BUNDLE_EXTENSION_ENGINE_SETVARIABLEVERSION_ARGS, pArgs);
182 ValidateMessageResults(hr, pvResults, BUNDLE_EXTENSION_ENGINE_SETVARIABLEVERSION_RESULTS, pResults);
183
184 hr = ExternalEngineSetVariableVersion(pContext->pEngineState, pArgs->wzVariable, pArgs->wzValue);
185
186LExit:
187 return hr;
188}
189
190static HRESULT BEEngineCompareVersions(
191 __in BURN_EXTENSION_ENGINE_CONTEXT* /*pContext*/,
192 __in const LPVOID pvArgs,
193 __inout LPVOID pvResults
194 )
195{
196 HRESULT hr = S_OK;
197 ValidateMessageArgs(hr, pvArgs, BUNDLE_EXTENSION_ENGINE_COMPAREVERSIONS_ARGS, pArgs);
198 ValidateMessageResults(hr, pvResults, BUNDLE_EXTENSION_ENGINE_COMPAREVERSIONS_RESULTS, pResults);
199
200 hr = ExternalEngineCompareVersions(pArgs->wzVersion1, pArgs->wzVersion2, &pResults->nResult);
201
202LExit:
203 return hr;
204}
205
206HRESULT WINAPI EngineForExtensionProc(
207 __in BUNDLE_EXTENSION_ENGINE_MESSAGE message,
208 __in const LPVOID pvArgs,
209 __inout LPVOID pvResults,
210 __in_opt LPVOID pvContext
211 )
212{
213 HRESULT hr = S_OK;
214 BURN_EXTENSION_ENGINE_CONTEXT* pContext = reinterpret_cast<BURN_EXTENSION_ENGINE_CONTEXT*>(pvContext);
215
216 if (!pContext || !pvArgs || !pvResults)
217 {
218 ExitFunction1(hr = E_INVALIDARG);
219 }
220
221 switch (message)
222 {
223 case BUNDLE_EXTENSION_ENGINE_MESSAGE_ESCAPESTRING:
224 hr = BEEngineEscapeString(pContext, pvArgs, pvResults);
225 break;
226 case BUNDLE_EXTENSION_ENGINE_MESSAGE_EVALUATECONDITION:
227 hr = BEEngineEvaluateCondition(pContext, pvArgs, pvResults);
228 break;
229 case BUNDLE_EXTENSION_ENGINE_MESSAGE_FORMATSTRING:
230 hr = BEEngineFormatString(pContext, pvArgs, pvResults);
231 break;
232 case BUNDLE_EXTENSION_ENGINE_MESSAGE_GETVARIABLENUMERIC:
233 hr = BEEngineGetVariableNumeric(pContext, pvArgs, pvResults);
234 break;
235 case BUNDLE_EXTENSION_ENGINE_MESSAGE_GETVARIABLESTRING:
236 hr = BEEngineGetVariableString(pContext, pvArgs, pvResults);
237 break;
238 case BUNDLE_EXTENSION_ENGINE_MESSAGE_GETVARIABLEVERSION:
239 hr = BEEngineGetVariableVersion(pContext, pvArgs, pvResults);
240 break;
241 case BUNDLE_EXTENSION_ENGINE_MESSAGE_LOG:
242 hr = BEEngineLog(pContext, pvArgs, pvResults);
243 break;
244 case BUNDLE_EXTENSION_ENGINE_MESSAGE_SETVARIABLENUMERIC:
245 hr = BEEngineSetVariableNumeric(pContext, pvArgs, pvResults);
246 break;
247 case BUNDLE_EXTENSION_ENGINE_MESSAGE_SETVARIABLESTRING:
248 hr = BEEngineSetVariableString(pContext, pvArgs, pvResults);
249 break;
250 case BUNDLE_EXTENSION_ENGINE_MESSAGE_SETVARIABLEVERSION:
251 hr = BEEngineSetVariableVersion(pContext, pvArgs, pvResults);
252 break;
253 case BUNDLE_EXTENSION_ENGINE_MESSAGE_COMPAREVERSIONS:
254 hr = BEEngineCompareVersions(pContext, pvArgs, pvResults);
255 break;
256 default:
257 hr = E_NOTIMPL;
258 break;
259 }
260
261LExit:
262 return hr;
263}