@@ -32,7 +32,6 @@ void WindowsManifestError::log(raw_ostream &OS) const { OS << Msg; }
3232
3333class WindowsManifestMerger ::WindowsManifestMergerImpl {
3434public:
35- ~WindowsManifestMergerImpl ();
3635 Error merge (MemoryBufferRef Manifest);
3736 std::unique_ptr<MemoryBuffer> getMergedManifest ();
3837
@@ -45,7 +44,7 @@ class WindowsManifestMerger::WindowsManifestMergerImpl {
4544 void operator ()(xmlDoc *Ptr) { xmlFreeDoc (Ptr); }
4645 };
4746 xmlDocPtr CombinedDoc = nullptr ;
48- std::vector<xmlDocPtr > MergedDocs;
47+ std::vector<std::unique_ptr<xmlDoc, XmlDeleter> > MergedDocs;
4948 bool Merged = false ;
5049 int BufferSize = 0 ;
5150 std::unique_ptr<xmlChar, XmlDeleter> Buffer;
@@ -611,11 +610,6 @@ static void checkAndStripPrefixes(xmlNodePtr Node,
611610 }
612611}
613612
614- WindowsManifestMerger::WindowsManifestMergerImpl::~WindowsManifestMergerImpl () {
615- for (auto &Doc : MergedDocs)
616- xmlFreeDoc (Doc);
617- }
618-
619613Error WindowsManifestMerger::WindowsManifestMergerImpl::merge (
620614 MemoryBufferRef Manifest) {
621615 if (Merged)
@@ -626,17 +620,17 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
626620 " attempted to merge empty manifest" );
627621 xmlSetGenericErrorFunc ((void *)this ,
628622 WindowsManifestMergerImpl::errorCallback);
629- xmlDocPtr ManifestXML = xmlReadMemory (
623+ std::unique_ptr<xmlDoc, XmlDeleter> ManifestXML ( xmlReadMemory (
630624 Manifest.getBufferStart (), Manifest.getBufferSize (), " manifest.xml" ,
631- nullptr , XML_PARSE_NOBLANKS | XML_PARSE_NODICT);
625+ nullptr , XML_PARSE_NOBLANKS | XML_PARSE_NODICT)) ;
632626 xmlSetGenericErrorFunc (nullptr , nullptr );
633627 if (auto E = getParseError ())
634628 return E;
635- xmlNodePtr AdditionalRoot = xmlDocGetRootElement (ManifestXML);
629+ xmlNodePtr AdditionalRoot = xmlDocGetRootElement (ManifestXML. get () );
636630 stripComments (AdditionalRoot);
637631 setAttributeNamespaces (AdditionalRoot);
638632 if (CombinedDoc == nullptr ) {
639- CombinedDoc = ManifestXML;
633+ CombinedDoc = ManifestXML. get () ;
640634 } else {
641635 xmlNodePtr CombinedRoot = xmlDocGetRootElement (CombinedDoc);
642636 if (!xmlStringsEqual (CombinedRoot->name , AdditionalRoot->name ) ||
@@ -648,7 +642,7 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
648642 return E;
649643 }
650644 }
651- MergedDocs.push_back (ManifestXML);
645+ MergedDocs.push_back (std::move ( ManifestXML) );
652646 return Error::success ();
653647}
654648
0 commit comments