@@ -106,53 +106,38 @@ namespace platform {
106
106
return std::string (Buffer.str ());
107
107
}
108
108
109
- #if defined(LLVM_ON_UNIX)
110
- static void DLErr (std::string* Err) {
111
- if (!Err)
112
- return ;
113
- if (const char * DyLibError = ::dlerror ())
114
- *Err = DyLibError;
109
+ #if defined(_WIN32)
110
+ void * DLOpen (const std::string& Path, std::string& Err) {
111
+ auto lib = llvm::sys::DynamicLibrary::getLibrary (Path.c_str (), &Err);
112
+ return lib.getOSSpecificHandle ();
115
113
}
116
114
117
- void * DLOpen (const std::string& Path, std::string* Err /* = nullptr */ ) {
118
- void * Lib = ::dlopen (Path.c_str (), RTLD_LAZY | RTLD_GLOBAL);
119
- DLErr (Err);
120
- return Lib;
115
+ void DLClose (void * Lib, std::string& Err) {
116
+ auto dl = llvm::sys::DynamicLibrary (Lib);
117
+ llvm::sys::DynamicLibrary::closeLibrary (dl);
118
+ if (Err.empty ()) {
119
+ Err = std::string ();
120
+ }
121
+ }
122
+ #elif defined(LLVM_ON_UNIX)
123
+ static void DLErr (std::string& Err) {
124
+ if (const char * DyLibError = ::dlerror ())
125
+ Err = std::string (DyLibError);
121
126
}
122
127
123
- void * DLSym (const std::string& Name, std::string* Err /* = nullptr*/ ) {
124
- if (void * Self = ::dlopen (nullptr , RTLD_GLOBAL)) {
125
- // get dlopen error if there is one
126
- DLErr (Err);
127
- void * Sym = ::dlsym (Self, Name.c_str ());
128
- // overwrite error if dlsym caused one
128
+ void * DLOpen (const std::string& Path, std::string& Err) {
129
+ void * Lib = ::dlopen (Path.c_str (), RTLD_LAZY | RTLD_GLOBAL);
130
+ if (Lib == nullptr ) {
129
131
DLErr (Err);
130
- // only get dlclose error if dlopen & dlsym haven't emited one
131
- DLClose (Self, Err && Err->empty () ? Err : nullptr );
132
- return Sym;
132
+ return nullptr ;
133
133
}
134
- DLErr (Err);
135
- return nullptr ;
134
+ return Lib;
136
135
}
137
136
138
- void DLClose (void * Lib, std::string* Err /* = nullptr */ ) {
137
+ void DLClose (void * Lib, std::string& Err) {
139
138
::dlclose (Lib);
140
139
DLErr (Err);
141
140
}
142
- #elif defined(_WIN32)
143
-
144
- void * DLOpen (const std::string& Path, std::string* Err /* = nullptr */ ) {
145
- auto lib = llvm::sys::DynamicLibrary::getLibrary (Path.c_str (), Err);
146
- return lib.getOSSpecificHandle ();
147
- }
148
-
149
- void DLClose (void * Lib, std::string* Err /* = nullptr*/ ) {
150
- auto dl = llvm::sys::DynamicLibrary (Lib);
151
- llvm::sys::DynamicLibrary::closeLibrary (dl);
152
- if (Err) {
153
- *Err = std::string ();
154
- }
155
- }
156
141
#endif
157
142
158
143
} // namespace platform
0 commit comments