From 415a5aaa363634d76c3b75bf76a51172166e2306 Mon Sep 17 00:00:00 2001 From: Tony Puccinelli Date: Fri, 6 Aug 2010 01:36:47 +0000 Subject: hacky way to put ELFPlugin::findSymbol in elf-provider.cpp without compiler errors svn-id: r51775 --- backends/plugins/elf-provider.cpp | 27 +++++++++++++++++++++++++++ backends/plugins/elf-provider.h | 29 +---------------------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/backends/plugins/elf-provider.cpp b/backends/plugins/elf-provider.cpp index 08ef7899d2..43f999b461 100644 --- a/backends/plugins/elf-provider.cpp +++ b/backends/plugins/elf-provider.cpp @@ -31,6 +31,33 @@ #if defined(DYNAMIC_MODULES) && defined(ELF_LOADER_TARGET) +void (* ELFPlugin::findSymbol(const char *symbol))() { + void *func; + bool handleNull; + if (_dlHandle == NULL) { + func = NULL; + handleNull = true; + } else { + func = _dlHandle->symbol(symbol); + } + if (!func) { + if (handleNull) { + warning("Failed loading symbol '%s' from plugin '%s' (Handle is NULL)", symbol, _filename.c_str()); + } else { + warning("Failed loading symbol '%s' from plugin '%s'", symbol, _filename.c_str()); + } + } + + // FIXME HACK: This is a HACK to circumvent a clash between the ISO C++ + // standard and POSIX: ISO C++ disallows casting between function pointers + // and data pointers, but dlsym always returns a void pointer. For details, + // see e.g. . + assert(sizeof(VoidFunc) == sizeof(func)); + VoidFunc tmp; + memcpy(&tmp, &func, sizeof(VoidFunc)); + return tmp; +} + bool ELFPlugin::loadPlugin() { assert(!_dlHandle); DLObject *obj = new DLObject(NULL); diff --git a/backends/plugins/elf-provider.h b/backends/plugins/elf-provider.h index 981d0d0638..3ed4816c19 100644 --- a/backends/plugins/elf-provider.h +++ b/backends/plugins/elf-provider.h @@ -39,34 +39,7 @@ protected: DLObject *_dlHandle; Common::String _filename; - //FIXME: The code for this method should be in elf-provider.cpp, - // but VoidFunc isn't recognized if we do that as is. - virtual VoidFunc findSymbol(const char *symbol) { - void *func; - bool handleNull; - if (_dlHandle == NULL) { - func = NULL; - handleNull = true; - } else { - func = _dlHandle->symbol(symbol); - } - if (!func) { - if (handleNull) { - warning("Failed loading symbol '%s' from plugin '%s' (Handle is NULL)", symbol, _filename.c_str()); - } else { - warning("Failed loading symbol '%s' from plugin '%s'", symbol, _filename.c_str()); - } - } - - // FIXME HACK: This is a HACK to circumvent a clash between the ISO C++ - // standard and POSIX: ISO C++ disallows casting between function pointers - // and data pointers, but dlsym always returns a void pointer. For details, - // see e.g. . - assert(sizeof(VoidFunc) == sizeof(func)); - VoidFunc tmp; - memcpy(&tmp, &func, sizeof(VoidFunc)); - return tmp;; - } + virtual VoidFunc findSymbol(const char *symbol); public: ELFPlugin(const Common::String &filename) -- cgit v1.2.3