diff options
| author | Tony Puccinelli | 2010-08-03 06:25:03 +0000 | 
|---|---|---|
| committer | Tony Puccinelli | 2010-08-03 06:25:03 +0000 | 
| commit | 934c0b922c3927a203f2027f73a472fff5c48d4b (patch) | |
| tree | ef48b2b212c7a8af37dbddee2a9adabe33203d29 | |
| parent | d889a706f20c7d37ab56feb182fe14d04fb2cd4f (diff) | |
| download | scummvm-rg350-934c0b922c3927a203f2027f73a472fff5c48d4b.tar.gz scummvm-rg350-934c0b922c3927a203f2027f73a472fff5c48d4b.tar.bz2 scummvm-rg350-934c0b922c3927a203f2027f73a472fff5c48d4b.zip | |
got rid of dlopen, dlclose, etc. wrappers
svn-id: r51677
| -rw-r--r-- | backends/plugins/elf-loader.cpp | 41 | ||||
| -rw-r--r-- | backends/plugins/elf-loader.h | 1 | ||||
| -rw-r--r-- | backends/plugins/elf-provider.cpp | 38 | 
3 files changed, 30 insertions, 50 deletions
| diff --git a/backends/plugins/elf-loader.cpp b/backends/plugins/elf-loader.cpp index 33f97f5586..1b70ed5565 100644 --- a/backends/plugins/elf-loader.cpp +++ b/backends/plugins/elf-loader.cpp @@ -448,46 +448,5 @@ void *DLObject::symbol(const char *name) {  	return NULL;  } - -static char dlerr[MAXDLERRLEN]; - -void *dlopen(const char *filename, int flags) { -	DLObject *obj = new DLObject(dlerr); -	if (obj->open(filename)) -		return (void *)obj; -	delete obj; -	return NULL; -} - -int dlclose(void *handle) { -	DLObject *obj = (DLObject *)handle; -	if (obj == NULL) { -		strcpy(dlerr, "Handle is NULL."); -		return -1; -	} -	if (obj->close()) { -		delete obj; -		return 0; -	} -	return -1; -} - -void *dlsym(void *handle, const char *symbol) { -	if (handle == NULL) { -		strcpy(dlerr, "Handle is NULL."); -		return NULL; -	} -	return ((DLObject *)handle)->symbol(symbol); -} - -const char *dlerror() { -	return dlerr; -} - -void dlforgetsyms(void *handle) { -	if (handle != NULL) -		((DLObject *)handle)->discard_symtab(); -} -  #endif /* DYNAMIC_MODULES */ diff --git a/backends/plugins/elf-loader.h b/backends/plugins/elf-loader.h index 3f33b681bf..d6273b7e71 100644 --- a/backends/plugins/elf-loader.h +++ b/backends/plugins/elf-loader.h @@ -93,7 +93,6 @@ public:  extern "C" {      void *dlopen(const char *filename, int flags);      int dlclose(void *handle); -    void *dlsym(void *handle, const char *symbol);      const char *dlerror();      void dlforgetsyms(void *handle);  } diff --git a/backends/plugins/elf-provider.cpp b/backends/plugins/elf-provider.cpp index b623f0d881..4d4c66084d 100644 --- a/backends/plugins/elf-provider.cpp +++ b/backends/plugins/elf-provider.cpp @@ -31,6 +31,7 @@  #include "backends/plugins/elf-loader.h" +static char dlerr[MAXDLERRLEN];  class ELFPlugin : public DynamicPlugin {  protected: @@ -38,9 +39,15 @@ protected:  	Common::String _filename;  	virtual VoidFunc findSymbol(const char *symbol) { -		void *func = dlsym(_dlHandle, symbol); +		void *func; +		if (_dlHandle == NULL) { +			strcpy(dlerr, "Handle is NULL."); +			func = NULL; +		} else { +			func = ((DLObject *)_dlHandle)->symbol(symbol); +		}  		if (!func) -			warning("Failed loading symbol '%s' from plugin '%s' (%s)", symbol, _filename.c_str(), dlerror()); +			warning("Failed loading symbol '%s' from plugin '%s' (%s)", symbol, _filename.c_str(), dlerr);  		// FIXME HACK: This is a HACK to circumvent a clash between the ISO C++  		// standard and POSIX: ISO C++ disallows casting between function pointers @@ -62,17 +69,25 @@ public:  	bool loadPlugin() {  		assert(!_dlHandle); -		_dlHandle = dlopen(_filename.c_str(), RTLD_LAZY); +		DLObject *obj = new DLObject(dlerr); +		if (obj->open(_filename.c_str())) { +			_dlHandle = (void *)obj; +		} else { +			delete obj; +			_dlHandle = NULL; +		}  		if (!_dlHandle) { -			warning("Failed loading plugin '%s' (%s)", _filename.c_str(), dlerror()); +			warning("Failed loading plugin '%s' (%s)", _filename.c_str(), dlerr);  			return false;  		}  		bool ret = DynamicPlugin::loadPlugin(); -		if (ret) -			dlforgetsyms(_dlHandle); +		if (ret) { +			if (_dlHandle != NULL) +				((DLObject *)_dlHandle)->discard_symtab(); +		}  		return ret;  	} @@ -80,8 +95,15 @@ public:  	void unloadPlugin() {  		DynamicPlugin::unloadPlugin();  		if (_dlHandle) { -			if (dlclose(_dlHandle) != 0) -				warning("Failed unloading plugin '%s' (%s)", _filename.c_str(), dlerror()); +			DLObject *obj = (DLObject *)_dlHandle; +			if (obj == NULL) { +				strcpy(dlerr, "Handle is NULL."); +				warning("Failed unloading plugin '%s' (%s)", _filename.c_str(), dlerr); +			} else if (obj->close()) { +				delete obj; +			} else { +				warning("Failed unloading plugin '%s' (%s)", _filename.c_str(), dlerr); +			}  			_dlHandle = 0;  		}  	} | 
