@@ -32,7 +32,6 @@ void WindowsManifestError::log(raw_ostream &OS) const { OS << Msg; }
32
32
33
33
class WindowsManifestMerger ::WindowsManifestMergerImpl {
34
34
public:
35
- ~WindowsManifestMergerImpl ();
36
35
Error merge (MemoryBufferRef Manifest);
37
36
std::unique_ptr<MemoryBuffer> getMergedManifest ();
38
37
@@ -45,7 +44,7 @@ class WindowsManifestMerger::WindowsManifestMergerImpl {
45
44
void operator ()(xmlDoc *Ptr) { xmlFreeDoc (Ptr); }
46
45
};
47
46
xmlDocPtr CombinedDoc = nullptr ;
48
- std::vector<xmlDocPtr > MergedDocs;
47
+ std::vector<std::unique_ptr<xmlDoc, XmlDeleter> > MergedDocs;
49
48
bool Merged = false ;
50
49
int BufferSize = 0 ;
51
50
std::unique_ptr<xmlChar, XmlDeleter> Buffer;
@@ -611,11 +610,6 @@ static void checkAndStripPrefixes(xmlNodePtr Node,
611
610
}
612
611
}
613
612
614
- WindowsManifestMerger::WindowsManifestMergerImpl::~WindowsManifestMergerImpl () {
615
- for (auto &Doc : MergedDocs)
616
- xmlFreeDoc (Doc);
617
- }
618
-
619
613
Error WindowsManifestMerger::WindowsManifestMergerImpl::merge (
620
614
MemoryBufferRef Manifest) {
621
615
if (Merged)
@@ -626,17 +620,17 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
626
620
" attempted to merge empty manifest" );
627
621
xmlSetGenericErrorFunc ((void *)this ,
628
622
WindowsManifestMergerImpl::errorCallback);
629
- xmlDocPtr ManifestXML = xmlReadMemory (
623
+ std::unique_ptr<xmlDoc, XmlDeleter> ManifestXML ( xmlReadMemory (
630
624
Manifest.getBufferStart (), Manifest.getBufferSize (), " manifest.xml" ,
631
- nullptr , XML_PARSE_NOBLANKS | XML_PARSE_NODICT);
625
+ nullptr , XML_PARSE_NOBLANKS | XML_PARSE_NODICT)) ;
632
626
xmlSetGenericErrorFunc (nullptr , nullptr );
633
627
if (auto E = getParseError ())
634
628
return E;
635
- xmlNodePtr AdditionalRoot = xmlDocGetRootElement (ManifestXML);
629
+ xmlNodePtr AdditionalRoot = xmlDocGetRootElement (ManifestXML. get () );
636
630
stripComments (AdditionalRoot);
637
631
setAttributeNamespaces (AdditionalRoot);
638
632
if (CombinedDoc == nullptr ) {
639
- CombinedDoc = ManifestXML;
633
+ CombinedDoc = ManifestXML. get () ;
640
634
} else {
641
635
xmlNodePtr CombinedRoot = xmlDocGetRootElement (CombinedDoc);
642
636
if (!xmlStringsEqual (CombinedRoot->name , AdditionalRoot->name ) ||
@@ -648,7 +642,7 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
648
642
return E;
649
643
}
650
644
}
651
- MergedDocs.push_back (ManifestXML);
645
+ MergedDocs.push_back (std::move ( ManifestXML) );
652
646
return Error::success ();
653
647
}
654
648
0 commit comments