diff options
author | Vitaly Buka <vitalybuka@google.com> | 2025-02-23 22:52:02 -0800 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2025-02-23 22:52:02 -0800 |
commit | 936ef337f1c3cd0b94fd494dcb81e6e09ed0e284 (patch) | |
tree | 820b9aaedf43fc5598d832319030fb062fe16f7a | |
parent | a3093e56fc096f4ed4ea764bf0ee874c1057fc19 (diff) | |
parent | 8cfd2db29c5079a02dab713c59cfa8a5674d6ea3 (diff) | |
download | llvm-users/vitalybuka/spr/try-2.zip llvm-users/vitalybuka/spr/try-2.tar.gz llvm-users/vitalybuka/spr/try-2.tar.bz2 |
[𝘀𝗽𝗿] initial versionusers/vitalybuka/spr/try-2
Created using spr 1.3.4
-rw-r--r-- | llvm/lib/Support/Unix/DynamicLibrary.inc | 9 | ||||
-rw-r--r-- | llvm/lib/WindowsManifest/WindowsManifestMerger.cpp | 18 |
2 files changed, 13 insertions, 14 deletions
diff --git a/llvm/lib/Support/Unix/DynamicLibrary.inc b/llvm/lib/Support/Unix/DynamicLibrary.inc index 7452913..ac254790 100644 --- a/llvm/lib/Support/Unix/DynamicLibrary.inc +++ b/llvm/lib/Support/Unix/DynamicLibrary.inc @@ -27,8 +27,10 @@ DynamicLibrary::HandleSet::~HandleSet() { void *DynamicLibrary::HandleSet::DLOpen(const char *File, std::string *Err) { void *Handle = ::dlopen(File, RTLD_LAZY | RTLD_GLOBAL); if (!Handle) { - if (Err) + if (Err) { *Err = ::dlerror(); + ::dlerror(); + } return &DynamicLibrary::Invalid; } @@ -45,7 +47,10 @@ void *DynamicLibrary::HandleSet::DLOpen(const char *File, std::string *Err) { void DynamicLibrary::HandleSet::DLClose(void *Handle) { ::dlclose(Handle); } void *DynamicLibrary::HandleSet::DLSym(void *Handle, const char *Symbol) { - return ::dlsym(Handle, Symbol); + auto* p = ::dlsym(Handle, Symbol); + ::dlerror(); + ::dlerror(); + return p; } #else // !HAVE_DLOPEN diff --git a/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp b/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp index a85dcd2..cdd6368 100644 --- a/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp +++ b/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp @@ -32,7 +32,6 @@ void WindowsManifestError::log(raw_ostream &OS) const { OS << Msg; } class WindowsManifestMerger::WindowsManifestMergerImpl { public: - ~WindowsManifestMergerImpl(); Error merge(MemoryBufferRef Manifest); std::unique_ptr<MemoryBuffer> getMergedManifest(); @@ -45,7 +44,7 @@ private: void operator()(xmlDoc *Ptr) { xmlFreeDoc(Ptr); } }; xmlDocPtr CombinedDoc = nullptr; - std::vector<xmlDocPtr> MergedDocs; + std::vector<std::unique_ptr<xmlDoc, XmlDeleter>> MergedDocs; bool Merged = false; int BufferSize = 0; 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( MemoryBufferRef Manifest) { if (Merged) @@ -626,17 +620,17 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge( "attempted to merge empty manifest"); xmlSetGenericErrorFunc((void *)this, WindowsManifestMergerImpl::errorCallback); - xmlDocPtr ManifestXML = xmlReadMemory( + std::unique_ptr<xmlDoc, XmlDeleter> ManifestXML(xmlReadMemory( Manifest.getBufferStart(), Manifest.getBufferSize(), "manifest.xml", - nullptr, XML_PARSE_NOBLANKS | XML_PARSE_NODICT); + nullptr, XML_PARSE_NOBLANKS | XML_PARSE_NODICT)); xmlSetGenericErrorFunc(nullptr, nullptr); if (auto E = getParseError()) return E; - xmlNodePtr AdditionalRoot = xmlDocGetRootElement(ManifestXML); + xmlNodePtr AdditionalRoot = xmlDocGetRootElement(ManifestXML.get()); stripComments(AdditionalRoot); setAttributeNamespaces(AdditionalRoot); if (CombinedDoc == nullptr) { - CombinedDoc = ManifestXML; + CombinedDoc = ManifestXML.get(); } else { xmlNodePtr CombinedRoot = xmlDocGetRootElement(CombinedDoc); if (!xmlStringsEqual(CombinedRoot->name, AdditionalRoot->name) || @@ -648,7 +642,7 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge( return E; } } - MergedDocs.push_back(ManifestXML); + MergedDocs.push_back(std::move(ManifestXML)); return Error::success(); } |