diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2022-04-04 14:14:08 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-04-05 13:52:11 -0500 |
commit | 5ac804d68360fc8a2f66ec020e1fe2536792f179 (patch) | |
tree | 22f87b5a09147e197fb6a33d34da37b66753f458 /src/burn/engine/registration.cpp | |
parent | c0822d3142abcd17589861566d0724f5f0a6d0a0 (diff) | |
download | wix-5ac804d68360fc8a2f66ec020e1fe2536792f179.tar.gz wix-5ac804d68360fc8a2f66ec020e1fe2536792f179.tar.bz2 wix-5ac804d68360fc8a2f66ec020e1fe2536792f179.zip |
Update registration code with more concise Exit* macros.
Diffstat (limited to 'src/burn/engine/registration.cpp')
-rw-r--r-- | src/burn/engine/registration.cpp | 133 |
1 files changed, 42 insertions, 91 deletions
diff --git a/src/burn/engine/registration.cpp b/src/burn/engine/registration.cpp index f2b8383d..7b6aa6bb 100644 --- a/src/burn/engine/registration.cpp +++ b/src/burn/engine/registration.cpp | |||
@@ -122,29 +122,26 @@ extern "C" HRESULT RegistrationParseFromXml( | |||
122 | IXMLDOMNode* pixnArpNode = NULL; | 122 | IXMLDOMNode* pixnArpNode = NULL; |
123 | IXMLDOMNode* pixnUpdateNode = NULL; | 123 | IXMLDOMNode* pixnUpdateNode = NULL; |
124 | LPWSTR scz = NULL; | 124 | LPWSTR scz = NULL; |
125 | BOOL fFoundXml = FALSE; | ||
125 | 126 | ||
126 | // select registration node | 127 | // select registration node |
127 | hr = XmlSelectSingleNode(pixnBundle, L"Registration", &pixnRegistrationNode); | 128 | hr = XmlSelectSingleNode(pixnBundle, L"Registration", &pixnRegistrationNode); |
128 | if (S_FALSE == hr) | 129 | ExitOnRequiredXmlQueryFailure(hr, "Failed to select registration node."); |
129 | { | ||
130 | hr = E_NOTFOUND; | ||
131 | } | ||
132 | ExitOnFailure(hr, "Failed to select registration node."); | ||
133 | 130 | ||
134 | // @Id | 131 | // @Id |
135 | hr = XmlGetAttributeEx(pixnRegistrationNode, L"Id", &pRegistration->sczId); | 132 | hr = XmlGetAttributeEx(pixnRegistrationNode, L"Id", &pRegistration->sczId); |
136 | ExitOnFailure(hr, "Failed to get @Id."); | 133 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @Id."); |
137 | 134 | ||
138 | // @Tag | 135 | // @Tag |
139 | hr = XmlGetAttributeEx(pixnRegistrationNode, L"Tag", &pRegistration->sczTag); | 136 | hr = XmlGetAttributeEx(pixnRegistrationNode, L"Tag", &pRegistration->sczTag); |
140 | ExitOnFailure(hr, "Failed to get @Tag."); | 137 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @Tag."); |
141 | 138 | ||
142 | hr = BundlePackageEngineParseRelatedCodes(pixnBundle, &pRegistration->rgsczDetectCodes, &pRegistration->cDetectCodes, &pRegistration->rgsczUpgradeCodes, &pRegistration->cUpgradeCodes, &pRegistration->rgsczAddonCodes, &pRegistration->cAddonCodes, &pRegistration->rgsczPatchCodes, &pRegistration->cPatchCodes); | 139 | hr = BundlePackageEngineParseRelatedCodes(pixnBundle, &pRegistration->rgsczDetectCodes, &pRegistration->cDetectCodes, &pRegistration->rgsczUpgradeCodes, &pRegistration->cUpgradeCodes, &pRegistration->rgsczAddonCodes, &pRegistration->cAddonCodes, &pRegistration->rgsczPatchCodes, &pRegistration->cPatchCodes); |
143 | ExitOnFailure(hr, "Failed to parse related bundles"); | 140 | ExitOnFailure(hr, "Failed to parse related bundles"); |
144 | 141 | ||
145 | // @Version | 142 | // @Version |
146 | hr = XmlGetAttributeEx(pixnRegistrationNode, L"Version", &scz); | 143 | hr = XmlGetAttributeEx(pixnRegistrationNode, L"Version", &scz); |
147 | ExitOnFailure(hr, "Failed to get @Version."); | 144 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @Version."); |
148 | 145 | ||
149 | hr = VerParseVersion(scz, 0, FALSE, &pRegistration->pVersion); | 146 | hr = VerParseVersion(scz, 0, FALSE, &pRegistration->pVersion); |
150 | ExitOnFailure(hr, "Failed to parse @Version: %ls", scz); | 147 | ExitOnFailure(hr, "Failed to parse @Version: %ls", scz); |
@@ -156,106 +153,75 @@ extern "C" HRESULT RegistrationParseFromXml( | |||
156 | 153 | ||
157 | // @ProviderKey | 154 | // @ProviderKey |
158 | hr = XmlGetAttributeEx(pixnRegistrationNode, L"ProviderKey", &pRegistration->sczProviderKey); | 155 | hr = XmlGetAttributeEx(pixnRegistrationNode, L"ProviderKey", &pRegistration->sczProviderKey); |
159 | ExitOnFailure(hr, "Failed to get @ProviderKey."); | 156 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @ProviderKey."); |
160 | 157 | ||
161 | // @ExecutableName | 158 | // @ExecutableName |
162 | hr = XmlGetAttributeEx(pixnRegistrationNode, L"ExecutableName", &pRegistration->sczExecutableName); | 159 | hr = XmlGetAttributeEx(pixnRegistrationNode, L"ExecutableName", &pRegistration->sczExecutableName); |
163 | ExitOnFailure(hr, "Failed to get @ExecutableName."); | 160 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @ExecutableName."); |
164 | 161 | ||
165 | // @PerMachine | 162 | // @PerMachine |
166 | hr = XmlGetYesNoAttribute(pixnRegistrationNode, L"PerMachine", &pRegistration->fPerMachine); | 163 | hr = XmlGetYesNoAttribute(pixnRegistrationNode, L"PerMachine", &pRegistration->fPerMachine); |
167 | ExitOnFailure(hr, "Failed to get @PerMachine."); | 164 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @PerMachine."); |
168 | 165 | ||
169 | // select ARP node | 166 | // select ARP node |
170 | hr = XmlSelectSingleNode(pixnRegistrationNode, L"Arp", &pixnArpNode); | 167 | hr = XmlSelectSingleNode(pixnRegistrationNode, L"Arp", &pixnArpNode); |
171 | if (S_FALSE != hr) | 168 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to select ARP node."); |
172 | { | ||
173 | ExitOnFailure(hr, "Failed to select ARP node."); | ||
174 | 169 | ||
170 | if (fFoundXml) | ||
171 | { | ||
175 | // @Register | 172 | // @Register |
176 | hr = XmlGetYesNoAttribute(pixnArpNode, L"Register", &pRegistration->fRegisterArp); | 173 | hr = XmlGetYesNoAttribute(pixnArpNode, L"Register", &pRegistration->fRegisterArp); |
177 | ExitOnFailure(hr, "Failed to get @Register."); | 174 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @Register."); |
178 | 175 | ||
179 | // @DisplayName | 176 | // @DisplayName |
180 | hr = XmlGetAttributeEx(pixnArpNode, L"DisplayName", &pRegistration->sczDisplayName); | 177 | hr = XmlGetAttributeEx(pixnArpNode, L"DisplayName", &pRegistration->sczDisplayName); |
181 | if (E_NOTFOUND != hr) | 178 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @DisplayName."); |
182 | { | ||
183 | ExitOnFailure(hr, "Failed to get @DisplayName."); | ||
184 | } | ||
185 | 179 | ||
186 | // @InProgressDisplayName | 180 | // @InProgressDisplayName |
187 | hr = XmlGetAttributeEx(pixnArpNode, L"InProgressDisplayName", &pRegistration->sczInProgressDisplayName); | 181 | hr = XmlGetAttributeEx(pixnArpNode, L"InProgressDisplayName", &pRegistration->sczInProgressDisplayName); |
188 | if (E_NOTFOUND != hr) | 182 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @InProgressDisplayName."); |
189 | { | ||
190 | ExitOnFailure(hr, "Failed to get @InProgressDisplayName."); | ||
191 | } | ||
192 | 183 | ||
193 | // @DisplayVersion | 184 | // @DisplayVersion |
194 | hr = XmlGetAttributeEx(pixnArpNode, L"DisplayVersion", &pRegistration->sczDisplayVersion); | 185 | hr = XmlGetAttributeEx(pixnArpNode, L"DisplayVersion", &pRegistration->sczDisplayVersion); |
195 | if (E_NOTFOUND != hr) | 186 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @DisplayVersion."); |
196 | { | ||
197 | ExitOnFailure(hr, "Failed to get @DisplayVersion."); | ||
198 | } | ||
199 | 187 | ||
200 | // @Publisher | 188 | // @Publisher |
201 | hr = XmlGetAttributeEx(pixnArpNode, L"Publisher", &pRegistration->sczPublisher); | 189 | hr = XmlGetAttributeEx(pixnArpNode, L"Publisher", &pRegistration->sczPublisher); |
202 | if (E_NOTFOUND != hr) | 190 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @Publisher."); |
203 | { | ||
204 | ExitOnFailure(hr, "Failed to get @Publisher."); | ||
205 | } | ||
206 | 191 | ||
207 | // @HelpLink | 192 | // @HelpLink |
208 | hr = XmlGetAttributeEx(pixnArpNode, L"HelpLink", &pRegistration->sczHelpLink); | 193 | hr = XmlGetAttributeEx(pixnArpNode, L"HelpLink", &pRegistration->sczHelpLink); |
209 | if (E_NOTFOUND != hr) | 194 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @HelpLink."); |
210 | { | ||
211 | ExitOnFailure(hr, "Failed to get @HelpLink."); | ||
212 | } | ||
213 | 195 | ||
214 | // @HelpTelephone | 196 | // @HelpTelephone |
215 | hr = XmlGetAttributeEx(pixnArpNode, L"HelpTelephone", &pRegistration->sczHelpTelephone); | 197 | hr = XmlGetAttributeEx(pixnArpNode, L"HelpTelephone", &pRegistration->sczHelpTelephone); |
216 | if (E_NOTFOUND != hr) | 198 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @HelpTelephone."); |
217 | { | ||
218 | ExitOnFailure(hr, "Failed to get @HelpTelephone."); | ||
219 | } | ||
220 | 199 | ||
221 | // @AboutUrl | 200 | // @AboutUrl |
222 | hr = XmlGetAttributeEx(pixnArpNode, L"AboutUrl", &pRegistration->sczAboutUrl); | 201 | hr = XmlGetAttributeEx(pixnArpNode, L"AboutUrl", &pRegistration->sczAboutUrl); |
223 | if (E_NOTFOUND != hr) | 202 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @AboutUrl."); |
224 | { | ||
225 | ExitOnFailure(hr, "Failed to get @AboutUrl."); | ||
226 | } | ||
227 | 203 | ||
228 | // @UpdateUrl | 204 | // @UpdateUrl |
229 | hr = XmlGetAttributeEx(pixnArpNode, L"UpdateUrl", &pRegistration->sczUpdateUrl); | 205 | hr = XmlGetAttributeEx(pixnArpNode, L"UpdateUrl", &pRegistration->sczUpdateUrl); |
230 | if (E_NOTFOUND != hr) | 206 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @UpdateUrl."); |
231 | { | ||
232 | ExitOnFailure(hr, "Failed to get @UpdateUrl."); | ||
233 | } | ||
234 | 207 | ||
235 | // @ParentDisplayName | 208 | // @ParentDisplayName |
236 | hr = XmlGetAttributeEx(pixnArpNode, L"ParentDisplayName", &pRegistration->sczParentDisplayName); | 209 | hr = XmlGetAttributeEx(pixnArpNode, L"ParentDisplayName", &pRegistration->sczParentDisplayName); |
237 | if (E_NOTFOUND != hr) | 210 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @ParentDisplayName."); |
238 | { | ||
239 | ExitOnFailure(hr, "Failed to get @ParentDisplayName."); | ||
240 | } | ||
241 | 211 | ||
242 | // @Comments | 212 | // @Comments |
243 | hr = XmlGetAttributeEx(pixnArpNode, L"Comments", &pRegistration->sczComments); | 213 | hr = XmlGetAttributeEx(pixnArpNode, L"Comments", &pRegistration->sczComments); |
244 | if (E_NOTFOUND != hr) | 214 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @Comments."); |
245 | { | ||
246 | ExitOnFailure(hr, "Failed to get @Comments."); | ||
247 | } | ||
248 | 215 | ||
249 | // @Contact | 216 | // @Contact |
250 | hr = XmlGetAttributeEx(pixnArpNode, L"Contact", &pRegistration->sczContact); | 217 | hr = XmlGetAttributeEx(pixnArpNode, L"Contact", &pRegistration->sczContact); |
251 | if (E_NOTFOUND != hr) | 218 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @Contact."); |
252 | { | ||
253 | ExitOnFailure(hr, "Failed to get @Contact."); | ||
254 | } | ||
255 | 219 | ||
256 | // @DisableModify | 220 | // @DisableModify |
257 | hr = XmlGetAttributeEx(pixnArpNode, L"DisableModify", &scz); | 221 | hr = XmlGetAttributeEx(pixnArpNode, L"DisableModify", &scz); |
258 | if (SUCCEEDED(hr)) | 222 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @DisableModify."); |
223 | |||
224 | if (fFoundXml) | ||
259 | { | 225 | { |
260 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"button", -1)) | 226 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"button", -1)) |
261 | { | 227 | { |
@@ -271,24 +237,17 @@ extern "C" HRESULT RegistrationParseFromXml( | |||
271 | } | 237 | } |
272 | else | 238 | else |
273 | { | 239 | { |
274 | hr = E_UNEXPECTED; | 240 | ExitWithRootFailure(hr, E_UNEXPECTED, "Invalid modify disabled type: %ls", scz); |
275 | ExitOnRootFailure(hr, "Invalid modify disabled type: %ls", scz); | ||
276 | } | 241 | } |
277 | } | 242 | } |
278 | else if (E_NOTFOUND == hr) | 243 | else |
279 | { | 244 | { |
280 | pRegistration->modify = BURN_REGISTRATION_MODIFY_ENABLED; | 245 | pRegistration->modify = BURN_REGISTRATION_MODIFY_ENABLED; |
281 | hr = S_OK; | ||
282 | } | 246 | } |
283 | ExitOnFailure(hr, "Failed to get @DisableModify."); | ||
284 | 247 | ||
285 | // @DisableRemove | 248 | // @DisableRemove |
286 | hr = XmlGetYesNoAttribute(pixnArpNode, L"DisableRemove", &pRegistration->fNoRemove); | 249 | hr = XmlGetYesNoAttribute(pixnArpNode, L"DisableRemove", &pRegistration->fNoRemove); |
287 | if (E_NOTFOUND != hr) | 250 | ExitOnOptionalXmlQueryFailure(hr, pRegistration->fNoRemoveDefined, "Failed to get @DisableRemove."); |
288 | { | ||
289 | ExitOnFailure(hr, "Failed to get @DisableRemove."); | ||
290 | pRegistration->fNoRemoveDefined = TRUE; | ||
291 | } | ||
292 | } | 251 | } |
293 | 252 | ||
294 | hr = ParseSoftwareTagsFromXml(pixnRegistrationNode, &pRegistration->softwareTags.rgSoftwareTags, &pRegistration->softwareTags.cSoftwareTags); | 253 | hr = ParseSoftwareTagsFromXml(pixnRegistrationNode, &pRegistration->softwareTags.rgSoftwareTags, &pRegistration->softwareTags.cSoftwareTags); |
@@ -296,37 +255,29 @@ extern "C" HRESULT RegistrationParseFromXml( | |||
296 | 255 | ||
297 | // select Update node | 256 | // select Update node |
298 | hr = XmlSelectSingleNode(pixnRegistrationNode, L"Update", &pixnUpdateNode); | 257 | hr = XmlSelectSingleNode(pixnRegistrationNode, L"Update", &pixnUpdateNode); |
299 | if (S_FALSE != hr) | 258 | ExitOnOptionalXmlQueryFailure(hr, pRegistration->update.fRegisterUpdate, "Failed to select Update node."); |
300 | { | ||
301 | ExitOnFailure(hr, "Failed to select Update node."); | ||
302 | |||
303 | pRegistration->update.fRegisterUpdate = TRUE; | ||
304 | 259 | ||
260 | if (pRegistration->update.fRegisterUpdate) | ||
261 | { | ||
305 | // @Manufacturer | 262 | // @Manufacturer |
306 | hr = XmlGetAttributeEx(pixnUpdateNode, L"Manufacturer", &pRegistration->update.sczManufacturer); | 263 | hr = XmlGetAttributeEx(pixnUpdateNode, L"Manufacturer", &pRegistration->update.sczManufacturer); |
307 | ExitOnFailure(hr, "Failed to get @Manufacturer."); | 264 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @Manufacturer."); |
308 | 265 | ||
309 | // @Department | 266 | // @Department |
310 | hr = XmlGetAttributeEx(pixnUpdateNode, L"Department", &pRegistration->update.sczDepartment); | 267 | hr = XmlGetAttributeEx(pixnUpdateNode, L"Department", &pRegistration->update.sczDepartment); |
311 | if (E_NOTFOUND != hr) | 268 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @Department."); |
312 | { | ||
313 | ExitOnFailure(hr, "Failed to get @Department."); | ||
314 | } | ||
315 | 269 | ||
316 | // @ProductFamily | 270 | // @ProductFamily |
317 | hr = XmlGetAttributeEx(pixnUpdateNode, L"ProductFamily", &pRegistration->update.sczProductFamily); | 271 | hr = XmlGetAttributeEx(pixnUpdateNode, L"ProductFamily", &pRegistration->update.sczProductFamily); |
318 | if (E_NOTFOUND != hr) | 272 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @ProductFamily."); |
319 | { | ||
320 | ExitOnFailure(hr, "Failed to get @ProductFamily."); | ||
321 | } | ||
322 | 273 | ||
323 | // @Name | 274 | // @Name |
324 | hr = XmlGetAttributeEx(pixnUpdateNode, L"Name", &pRegistration->update.sczName); | 275 | hr = XmlGetAttributeEx(pixnUpdateNode, L"Name", &pRegistration->update.sczName); |
325 | ExitOnFailure(hr, "Failed to get @Name."); | 276 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @Name."); |
326 | 277 | ||
327 | // @Classification | 278 | // @Classification |
328 | hr = XmlGetAttributeEx(pixnUpdateNode, L"Classification", &pRegistration->update.sczClassification); | 279 | hr = XmlGetAttributeEx(pixnUpdateNode, L"Classification", &pRegistration->update.sczClassification); |
329 | ExitOnFailure(hr, "Failed to get @Classification."); | 280 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @Classification."); |
330 | } | 281 | } |
331 | 282 | ||
332 | hr = SetPaths(pRegistration, pCache); | 283 | hr = SetPaths(pRegistration, pCache); |
@@ -1164,19 +1115,19 @@ static HRESULT ParseSoftwareTagsFromXml( | |||
1164 | BURN_SOFTWARE_TAG* pSoftwareTag = &pSoftwareTags[i]; | 1115 | BURN_SOFTWARE_TAG* pSoftwareTag = &pSoftwareTags[i]; |
1165 | 1116 | ||
1166 | hr = XmlNextElement(pixnNodes, &pixnNode, NULL); | 1117 | hr = XmlNextElement(pixnNodes, &pixnNode, NULL); |
1167 | ExitOnFailure(hr, "Failed to get next node."); | 1118 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get next node."); |
1168 | 1119 | ||
1169 | hr = XmlGetAttributeEx(pixnNode, L"Filename", &pSoftwareTag->sczFilename); | 1120 | hr = XmlGetAttributeEx(pixnNode, L"Filename", &pSoftwareTag->sczFilename); |
1170 | ExitOnFailure(hr, "Failed to get @Filename."); | 1121 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @Filename."); |
1171 | 1122 | ||
1172 | hr = XmlGetAttributeEx(pixnNode, L"Regid", &pSoftwareTag->sczRegid); | 1123 | hr = XmlGetAttributeEx(pixnNode, L"Regid", &pSoftwareTag->sczRegid); |
1173 | ExitOnFailure(hr, "Failed to get @Regid."); | 1124 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @Regid."); |
1174 | 1125 | ||
1175 | hr = XmlGetAttributeEx(pixnNode, L"Path", &pSoftwareTag->sczPath); | 1126 | hr = XmlGetAttributeEx(pixnNode, L"Path", &pSoftwareTag->sczPath); |
1176 | ExitOnFailure(hr, "Failed to get @Path."); | 1127 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @Path."); |
1177 | 1128 | ||
1178 | hr = XmlGetText(pixnNode, &bstrTagXml); | 1129 | hr = XmlGetText(pixnNode, &bstrTagXml); |
1179 | ExitOnFailure(hr, "Failed to get SoftwareTag text."); | 1130 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get SoftwareTag text."); |
1180 | 1131 | ||
1181 | hr = StrAnsiAllocString(&pSoftwareTag->sczTag, bstrTagXml, 0, CP_UTF8); | 1132 | hr = StrAnsiAllocString(&pSoftwareTag->sczTag, bstrTagXml, 0, CP_UTF8); |
1182 | ExitOnFailure(hr, "Failed to convert SoftwareTag text to UTF-8"); | 1133 | ExitOnFailure(hr, "Failed to convert SoftwareTag text to UTF-8"); |