aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2025-02-23 22:52:02 -0800
committerVitaly Buka <vitalybuka@google.com>2025-02-23 22:52:02 -0800
commit936ef337f1c3cd0b94fd494dcb81e6e09ed0e284 (patch)
tree820b9aaedf43fc5598d832319030fb062fe16f7a
parenta3093e56fc096f4ed4ea764bf0ee874c1057fc19 (diff)
parent8cfd2db29c5079a02dab713c59cfa8a5674d6ea3 (diff)
downloadllvm-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.inc9
-rw-r--r--llvm/lib/WindowsManifest/WindowsManifestMerger.cpp18
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();
}