Reland "[llvm-mt] Use XmlDeleter to free xmlFreeDoc"" (#128579)
Reverts llvm/llvm-project#128578 to reland llvm/llvm-project#128472.
This commit is contained in:
parent
36b339b84a
commit
6b444271a0
@ -32,7 +32,6 @@ void WindowsManifestError::log(raw_ostream &OS) const { OS << Msg; }
|
|||||||
|
|
||||||
class WindowsManifestMerger::WindowsManifestMergerImpl {
|
class WindowsManifestMerger::WindowsManifestMergerImpl {
|
||||||
public:
|
public:
|
||||||
~WindowsManifestMergerImpl();
|
|
||||||
Error merge(MemoryBufferRef Manifest);
|
Error merge(MemoryBufferRef Manifest);
|
||||||
std::unique_ptr<MemoryBuffer> getMergedManifest();
|
std::unique_ptr<MemoryBuffer> getMergedManifest();
|
||||||
|
|
||||||
@ -45,7 +44,7 @@ private:
|
|||||||
void operator()(xmlDoc *Ptr) { xmlFreeDoc(Ptr); }
|
void operator()(xmlDoc *Ptr) { xmlFreeDoc(Ptr); }
|
||||||
};
|
};
|
||||||
xmlDocPtr CombinedDoc = nullptr;
|
xmlDocPtr CombinedDoc = nullptr;
|
||||||
std::vector<xmlDocPtr> MergedDocs;
|
std::vector<std::unique_ptr<xmlDoc, XmlDeleter>> MergedDocs;
|
||||||
bool Merged = false;
|
bool Merged = false;
|
||||||
int BufferSize = 0;
|
int BufferSize = 0;
|
||||||
std::unique_ptr<xmlChar, XmlDeleter> Buffer;
|
std::unique_ptr<xmlChar, XmlDeleter> Buffer;
|
||||||
@ -611,11 +610,6 @@ static void checkAndStripPrefixes(xmlNodePtr Node,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowsManifestMerger::WindowsManifestMergerImpl::~WindowsManifestMergerImpl() {
|
|
||||||
for (auto &Doc : MergedDocs)
|
|
||||||
xmlFreeDoc(Doc);
|
|
||||||
}
|
|
||||||
|
|
||||||
Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
|
Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
|
||||||
MemoryBufferRef Manifest) {
|
MemoryBufferRef Manifest) {
|
||||||
if (Merged)
|
if (Merged)
|
||||||
@ -626,17 +620,17 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
|
|||||||
"attempted to merge empty manifest");
|
"attempted to merge empty manifest");
|
||||||
xmlSetGenericErrorFunc((void *)this,
|
xmlSetGenericErrorFunc((void *)this,
|
||||||
WindowsManifestMergerImpl::errorCallback);
|
WindowsManifestMergerImpl::errorCallback);
|
||||||
xmlDocPtr ManifestXML = xmlReadMemory(
|
std::unique_ptr<xmlDoc, XmlDeleter> ManifestXML(xmlReadMemory(
|
||||||
Manifest.getBufferStart(), Manifest.getBufferSize(), "manifest.xml",
|
Manifest.getBufferStart(), Manifest.getBufferSize(), "manifest.xml",
|
||||||
nullptr, XML_PARSE_NOBLANKS | XML_PARSE_NODICT);
|
nullptr, XML_PARSE_NOBLANKS | XML_PARSE_NODICT));
|
||||||
xmlSetGenericErrorFunc(nullptr, nullptr);
|
xmlSetGenericErrorFunc(nullptr, nullptr);
|
||||||
if (auto E = getParseError())
|
if (auto E = getParseError())
|
||||||
return E;
|
return E;
|
||||||
xmlNodePtr AdditionalRoot = xmlDocGetRootElement(ManifestXML);
|
xmlNodePtr AdditionalRoot = xmlDocGetRootElement(ManifestXML.get());
|
||||||
stripComments(AdditionalRoot);
|
stripComments(AdditionalRoot);
|
||||||
setAttributeNamespaces(AdditionalRoot);
|
setAttributeNamespaces(AdditionalRoot);
|
||||||
if (CombinedDoc == nullptr) {
|
if (CombinedDoc == nullptr) {
|
||||||
CombinedDoc = ManifestXML;
|
CombinedDoc = ManifestXML.get();
|
||||||
} else {
|
} else {
|
||||||
xmlNodePtr CombinedRoot = xmlDocGetRootElement(CombinedDoc);
|
xmlNodePtr CombinedRoot = xmlDocGetRootElement(CombinedDoc);
|
||||||
if (!xmlStringsEqual(CombinedRoot->name, AdditionalRoot->name) ||
|
if (!xmlStringsEqual(CombinedRoot->name, AdditionalRoot->name) ||
|
||||||
@ -648,7 +642,7 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
|
|||||||
return E;
|
return E;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MergedDocs.push_back(ManifestXML);
|
MergedDocs.push_back(std::move(ManifestXML));
|
||||||
return Error::success();
|
return Error::success();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -682,9 +676,6 @@ bool windows_manifest::isAvailable() { return true; }
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
WindowsManifestMerger::WindowsManifestMergerImpl::~WindowsManifestMergerImpl() {
|
|
||||||
}
|
|
||||||
|
|
||||||
Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
|
Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
|
||||||
MemoryBufferRef Manifest) {
|
MemoryBufferRef Manifest) {
|
||||||
return make_error<WindowsManifestError>("no libxml2");
|
return make_error<WindowsManifestError>("no libxml2");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user