aboutsummaryrefslogtreecommitdiff
path: root/src/libs/dutil/WixToolset.DUtil/atomutil.cpp
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2025-11-01 21:52:31 -0700
committerRob Mensching <rob@firegiant.com>2025-11-03 14:49:39 -0800
commitd2ba0da55725f2908b67e1470afc7cfd71cb3d1f (patch)
treec2a1db61c5fac031c698976106bba2c453d85ded /src/libs/dutil/WixToolset.DUtil/atomutil.cpp
parent4d626c294c4783d454e27ea4e5614037dac8576e (diff)
downloadwix-d2ba0da55725f2908b67e1470afc7cfd71cb3d1f.tar.gz
wix-d2ba0da55725f2908b67e1470afc7cfd71cb3d1f.tar.bz2
wix-d2ba0da55725f2908b67e1470afc7cfd71cb3d1f.zip
Use CompareStringOrdinal() instead of CompareString() case-sensitive
This commit moves to the modern CompareStringOrdinal() for all case-sensitve uses of CompareString() with the invariant locale. Resolves 6947
Diffstat (limited to 'src/libs/dutil/WixToolset.DUtil/atomutil.cpp')
-rw-r--r--src/libs/dutil/WixToolset.DUtil/atomutil.cpp66
1 files changed, 33 insertions, 33 deletions
diff --git a/src/libs/dutil/WixToolset.DUtil/atomutil.cpp b/src/libs/dutil/WixToolset.DUtil/atomutil.cpp
index d6fd3890..df5bb424 100644
--- a/src/libs/dutil/WixToolset.DUtil/atomutil.cpp
+++ b/src/libs/dutil/WixToolset.DUtil/atomutil.cpp
@@ -341,63 +341,63 @@ static HRESULT ParseAtomFeed(
341 341
342 while (S_OK == (hr = XmlNextElement(pNodeList, &pNode, &bstrNodeName))) 342 while (S_OK == (hr = XmlNextElement(pNodeList, &pNode, &bstrNodeName)))
343 { 343 {
344 if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"generator", -1)) 344 if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"generator", -1, FALSE))
345 { 345 {
346 hr = AssignString(&pNewFeed->wzGenerator, pNode); 346 hr = AssignString(&pNewFeed->wzGenerator, pNode);
347 AtomExitOnFailure(hr, "Failed to allocate ATOM feed generator."); 347 AtomExitOnFailure(hr, "Failed to allocate ATOM feed generator.");
348 } 348 }
349 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"icon", -1)) 349 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"icon", -1, FALSE))
350 { 350 {
351 hr = AssignString(&pNewFeed->wzIcon, pNode); 351 hr = AssignString(&pNewFeed->wzIcon, pNode);
352 AtomExitOnFailure(hr, "Failed to allocate ATOM feed icon."); 352 AtomExitOnFailure(hr, "Failed to allocate ATOM feed icon.");
353 } 353 }
354 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"id", -1)) 354 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"id", -1, FALSE))
355 { 355 {
356 hr = AssignString(&pNewFeed->wzId, pNode); 356 hr = AssignString(&pNewFeed->wzId, pNode);
357 AtomExitOnFailure(hr, "Failed to allocate ATOM feed id."); 357 AtomExitOnFailure(hr, "Failed to allocate ATOM feed id.");
358 } 358 }
359 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"logo", -1)) 359 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"logo", -1, FALSE))
360 { 360 {
361 hr = AssignString(&pNewFeed->wzLogo, pNode); 361 hr = AssignString(&pNewFeed->wzLogo, pNode);
362 AtomExitOnFailure(hr, "Failed to allocate ATOM feed logo."); 362 AtomExitOnFailure(hr, "Failed to allocate ATOM feed logo.");
363 } 363 }
364 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"subtitle", -1)) 364 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"subtitle", -1, FALSE))
365 { 365 {
366 hr = AssignString(&pNewFeed->wzSubtitle, pNode); 366 hr = AssignString(&pNewFeed->wzSubtitle, pNode);
367 AtomExitOnFailure(hr, "Failed to allocate ATOM feed subtitle."); 367 AtomExitOnFailure(hr, "Failed to allocate ATOM feed subtitle.");
368 } 368 }
369 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"title", -1)) 369 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"title", -1, FALSE))
370 { 370 {
371 hr = AssignString(&pNewFeed->wzTitle, pNode); 371 hr = AssignString(&pNewFeed->wzTitle, pNode);
372 AtomExitOnFailure(hr, "Failed to allocate ATOM feed title."); 372 AtomExitOnFailure(hr, "Failed to allocate ATOM feed title.");
373 } 373 }
374 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"updated", -1)) 374 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"updated", -1, FALSE))
375 { 375 {
376 hr = AssignDateTime(&pNewFeed->ftUpdated, pNode); 376 hr = AssignDateTime(&pNewFeed->ftUpdated, pNode);
377 AtomExitOnFailure(hr, "Failed to allocate ATOM feed updated."); 377 AtomExitOnFailure(hr, "Failed to allocate ATOM feed updated.");
378 } 378 }
379 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"author", -1)) 379 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"author", -1, FALSE))
380 { 380 {
381 hr = ParseAtomAuthor(pNode, &pNewFeed->rgAuthors[cAuthors]); 381 hr = ParseAtomAuthor(pNode, &pNewFeed->rgAuthors[cAuthors]);
382 AtomExitOnFailure(hr, "Failed to parse ATOM author."); 382 AtomExitOnFailure(hr, "Failed to parse ATOM author.");
383 383
384 ++cAuthors; 384 ++cAuthors;
385 } 385 }
386 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"category", -1)) 386 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"category", -1, FALSE))
387 { 387 {
388 hr = ParseAtomCategory(pNode, &pNewFeed->rgCategories[cCategories]); 388 hr = ParseAtomCategory(pNode, &pNewFeed->rgCategories[cCategories]);
389 AtomExitOnFailure(hr, "Failed to parse ATOM category."); 389 AtomExitOnFailure(hr, "Failed to parse ATOM category.");
390 390
391 ++cCategories; 391 ++cCategories;
392 } 392 }
393 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"entry", -1)) 393 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"entry", -1, FALSE))
394 { 394 {
395 hr = ParseAtomEntry(pNode, &pNewFeed->rgEntries[cEntries]); 395 hr = ParseAtomEntry(pNode, &pNewFeed->rgEntries[cEntries]);
396 AtomExitOnFailure(hr, "Failed to parse ATOM entry."); 396 AtomExitOnFailure(hr, "Failed to parse ATOM entry.");
397 397
398 ++cEntries; 398 ++cEntries;
399 } 399 }
400 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"link", -1)) 400 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"link", -1, FALSE))
401 { 401 {
402 hr = ParseAtomLink(pNode, &pNewFeed->rgLinks[cLinks]); 402 hr = ParseAtomLink(pNode, &pNewFeed->rgLinks[cLinks]);
403 AtomExitOnFailure(hr, "Failed to parse ATOM link."); 403 AtomExitOnFailure(hr, "Failed to parse ATOM link.");
@@ -516,17 +516,17 @@ static HRESULT ParseAtomAuthor(
516 516
517 while (S_OK == (hr = XmlNextElement(pNodeList, &pNode, &bstrNodeName))) 517 while (S_OK == (hr = XmlNextElement(pNodeList, &pNode, &bstrNodeName)))
518 { 518 {
519 if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"name", -1)) 519 if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"name", -1, FALSE))
520 { 520 {
521 hr = AssignString(&pAuthor->wzName, pNode); 521 hr = AssignString(&pAuthor->wzName, pNode);
522 AtomExitOnFailure(hr, "Failed to allocate ATOM author name."); 522 AtomExitOnFailure(hr, "Failed to allocate ATOM author name.");
523 } 523 }
524 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"email", -1)) 524 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"email", -1, FALSE))
525 { 525 {
526 hr = AssignString(&pAuthor->wzEmail, pNode); 526 hr = AssignString(&pAuthor->wzEmail, pNode);
527 AtomExitOnFailure(hr, "Failed to allocate ATOM author email."); 527 AtomExitOnFailure(hr, "Failed to allocate ATOM author email.");
528 } 528 }
529 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"uri", -1)) 529 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"uri", -1, FALSE))
530 { 530 {
531 hr = AssignString(&pAuthor->wzUrl, pNode); 531 hr = AssignString(&pAuthor->wzUrl, pNode);
532 AtomExitOnFailure(hr, "Failed to allocate ATOM author uri."); 532 AtomExitOnFailure(hr, "Failed to allocate ATOM author uri.");
@@ -570,17 +570,17 @@ static HRESULT ParseAtomCategory(
570 570
571 while (S_OK == (hr = XmlNextAttribute(pixnnmAttributes, &pNode, &bstrNodeName))) 571 while (S_OK == (hr = XmlNextAttribute(pixnnmAttributes, &pNode, &bstrNodeName)))
572 { 572 {
573 if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"label", -1)) 573 if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"label", -1, FALSE))
574 { 574 {
575 hr = AssignString(&pCategory->wzLabel, pNode); 575 hr = AssignString(&pCategory->wzLabel, pNode);
576 AtomExitOnFailure(hr, "Failed to allocate ATOM category label."); 576 AtomExitOnFailure(hr, "Failed to allocate ATOM category label.");
577 } 577 }
578 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"scheme", -1)) 578 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"scheme", -1, FALSE))
579 { 579 {
580 hr = AssignString(&pCategory->wzScheme, pNode); 580 hr = AssignString(&pCategory->wzScheme, pNode);
581 AtomExitOnFailure(hr, "Failed to allocate ATOM category scheme."); 581 AtomExitOnFailure(hr, "Failed to allocate ATOM category scheme.");
582 } 582 }
583 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"term", -1)) 583 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"term", -1, FALSE))
584 { 584 {
585 hr = AssignString(&pCategory->wzTerm, pNode); 585 hr = AssignString(&pCategory->wzTerm, pNode);
586 AtomExitOnFailure(hr, "Failed to allocate ATOM category term."); 586 AtomExitOnFailure(hr, "Failed to allocate ATOM category term.");
@@ -639,12 +639,12 @@ static HRESULT ParseAtomContent(
639 639
640 while (S_OK == (hr = XmlNextAttribute(pixnnmAttributes, &pNode, &bstrNodeName))) 640 while (S_OK == (hr = XmlNextAttribute(pixnnmAttributes, &pNode, &bstrNodeName)))
641 { 641 {
642 if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"type", -1)) 642 if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"type", -1, FALSE))
643 { 643 {
644 hr = AssignString(&pContent->wzType, pNode); 644 hr = AssignString(&pContent->wzType, pNode);
645 AtomExitOnFailure(hr, "Failed to allocate ATOM content type."); 645 AtomExitOnFailure(hr, "Failed to allocate ATOM content type.");
646 } 646 }
647 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"url", -1)) 647 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"url", -1, FALSE))
648 { 648 {
649 hr = AssignString(&pContent->wzUrl, pNode); 649 hr = AssignString(&pContent->wzUrl, pNode);
650 AtomExitOnFailure(hr, "Failed to allocate ATOM content scheme."); 650 AtomExitOnFailure(hr, "Failed to allocate ATOM content scheme.");
@@ -721,46 +721,46 @@ static HRESULT ParseAtomEntry(
721 721
722 while (S_OK == (hr = XmlNextElement(pNodeList, &pNode, &bstrNodeName))) 722 while (S_OK == (hr = XmlNextElement(pNodeList, &pNode, &bstrNodeName)))
723 { 723 {
724 if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"id", -1)) 724 if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"id", -1, FALSE))
725 { 725 {
726 hr = AssignString(&pEntry->wzId, pNode); 726 hr = AssignString(&pEntry->wzId, pNode);
727 AtomExitOnFailure(hr, "Failed to allocate ATOM entry id."); 727 AtomExitOnFailure(hr, "Failed to allocate ATOM entry id.");
728 } 728 }
729 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"summary", -1)) 729 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"summary", -1, FALSE))
730 { 730 {
731 hr = AssignString(&pEntry->wzSummary, pNode); 731 hr = AssignString(&pEntry->wzSummary, pNode);
732 AtomExitOnFailure(hr, "Failed to allocate ATOM entry summary."); 732 AtomExitOnFailure(hr, "Failed to allocate ATOM entry summary.");
733 } 733 }
734 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"title", -1)) 734 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"title", -1, FALSE))
735 { 735 {
736 hr = AssignString(&pEntry->wzTitle, pNode); 736 hr = AssignString(&pEntry->wzTitle, pNode);
737 AtomExitOnFailure(hr, "Failed to allocate ATOM entry title."); 737 AtomExitOnFailure(hr, "Failed to allocate ATOM entry title.");
738 } 738 }
739 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"published", -1)) 739 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"published", -1, FALSE))
740 { 740 {
741 hr = AssignDateTime(&pEntry->ftPublished, pNode); 741 hr = AssignDateTime(&pEntry->ftPublished, pNode);
742 AtomExitOnFailure(hr, "Failed to allocate ATOM entry published."); 742 AtomExitOnFailure(hr, "Failed to allocate ATOM entry published.");
743 } 743 }
744 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"updated", -1)) 744 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"updated", -1, FALSE))
745 { 745 {
746 hr = AssignDateTime(&pEntry->ftUpdated, pNode); 746 hr = AssignDateTime(&pEntry->ftUpdated, pNode);
747 AtomExitOnFailure(hr, "Failed to allocate ATOM entry updated."); 747 AtomExitOnFailure(hr, "Failed to allocate ATOM entry updated.");
748 } 748 }
749 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"author", -1)) 749 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"author", -1, FALSE))
750 { 750 {
751 hr = ParseAtomAuthor(pNode, &pEntry->rgAuthors[cAuthors]); 751 hr = ParseAtomAuthor(pNode, &pEntry->rgAuthors[cAuthors]);
752 AtomExitOnFailure(hr, "Failed to parse ATOM entry author."); 752 AtomExitOnFailure(hr, "Failed to parse ATOM entry author.");
753 753
754 ++cAuthors; 754 ++cAuthors;
755 } 755 }
756 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"category", -1)) 756 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"category", -1, FALSE))
757 { 757 {
758 hr = ParseAtomCategory(pNode, &pEntry->rgCategories[cCategories]); 758 hr = ParseAtomCategory(pNode, &pEntry->rgCategories[cCategories]);
759 AtomExitOnFailure(hr, "Failed to parse ATOM entry category."); 759 AtomExitOnFailure(hr, "Failed to parse ATOM entry category.");
760 760
761 ++cCategories; 761 ++cCategories;
762 } 762 }
763 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"content", -1)) 763 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"content", -1, FALSE))
764 { 764 {
765 if (NULL != pEntry->pContent) 765 if (NULL != pEntry->pContent)
766 { 766 {
@@ -774,7 +774,7 @@ static HRESULT ParseAtomEntry(
774 hr = ParseAtomContent(pNode, pEntry->pContent); 774 hr = ParseAtomContent(pNode, pEntry->pContent);
775 AtomExitOnFailure(hr, "Failed to parse ATOM entry content."); 775 AtomExitOnFailure(hr, "Failed to parse ATOM entry content.");
776 } 776 }
777 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"link", -1)) 777 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"link", -1, FALSE))
778 { 778 {
779 hr = ParseAtomLink(pNode, &pEntry->rgLinks[cLinks]); 779 hr = ParseAtomLink(pNode, &pEntry->rgLinks[cLinks]);
780 AtomExitOnFailure(hr, "Failed to parse ATOM entry link."); 780 AtomExitOnFailure(hr, "Failed to parse ATOM entry link.");
@@ -842,17 +842,17 @@ static HRESULT ParseAtomLink(
842 842
843 while (S_OK == (hr = XmlNextAttribute(pixnnmAttributes, &pNode, &bstrNodeName))) 843 while (S_OK == (hr = XmlNextAttribute(pixnnmAttributes, &pNode, &bstrNodeName)))
844 { 844 {
845 if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"rel", -1)) 845 if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"rel", -1, FALSE))
846 { 846 {
847 hr = AssignString(&pLink->wzRel, pNode); 847 hr = AssignString(&pLink->wzRel, pNode);
848 AtomExitOnFailure(hr, "Failed to allocate ATOM link rel."); 848 AtomExitOnFailure(hr, "Failed to allocate ATOM link rel.");
849 } 849 }
850 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"href", -1)) 850 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"href", -1, FALSE))
851 { 851 {
852 hr = AssignString(&pLink->wzUrl, pNode); 852 hr = AssignString(&pLink->wzUrl, pNode);
853 AtomExitOnFailure(hr, "Failed to allocate ATOM link href."); 853 AtomExitOnFailure(hr, "Failed to allocate ATOM link href.");
854 } 854 }
855 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"length", -1)) 855 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"length", -1, FALSE))
856 { 856 {
857 hr = XmlGetAttributeUInt64(pixnLink, bstrNodeName, &pLink->dw64Length); 857 hr = XmlGetAttributeUInt64(pixnLink, bstrNodeName, &pLink->dw64Length);
858 if (E_INVALIDARG == hr) 858 if (E_INVALIDARG == hr)
@@ -861,12 +861,12 @@ static HRESULT ParseAtomLink(
861 } 861 }
862 AtomExitOnFailure(hr, "Failed to parse ATOM link length."); 862 AtomExitOnFailure(hr, "Failed to parse ATOM link length.");
863 } 863 }
864 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"title", -1)) 864 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"title", -1, FALSE))
865 { 865 {
866 hr = AssignString(&pLink->wzTitle, pNode); 866 hr = AssignString(&pLink->wzTitle, pNode);
867 AtomExitOnFailure(hr, "Failed to allocate ATOM link title."); 867 AtomExitOnFailure(hr, "Failed to allocate ATOM link title.");
868 } 868 }
869 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"type", -1)) 869 else if (CSTR_EQUAL == ::CompareStringOrdinal(bstrNodeName, -1, L"type", -1, FALSE))
870 { 870 {
871 hr = AssignString(&pLink->wzType, pNode); 871 hr = AssignString(&pLink->wzType, pNode);
872 AtomExitOnFailure(hr, "Failed to allocate ATOM link type."); 872 AtomExitOnFailure(hr, "Failed to allocate ATOM link type.");