From: stephan b. <sg...@us...> - 2004-12-25 16:03:02
|
Update of /cvsroot/pclasses/pclasses2/src/System In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26508/src/System Modified Files: SharedLib.dl.cpp SharedLib.dyld.cpp SharedLib.generic.cpp SharedLib.shl.cpp SharedLib.win32.cpp Log Message: Added throw RuntimeError when operator[](const char *) is passed 0. Changed op[](string) to pass 0 to op[](char*) when string is empty, so that it inherits the platform-specific throw behaviour (string version is in SharedLib.generic.cpp). Index: SharedLib.dyld.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/System/SharedLib.dyld.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- SharedLib.dyld.cpp 25 Dec 2004 07:02:16 -0000 1.5 +++ SharedLib.dyld.cpp 25 Dec 2004 16:02:51 -0000 1.6 @@ -83,16 +83,21 @@ SharedLib::~SharedLib() throw() { - NSUnLinkModule((NSModule)_handle, NSUNLINKMODULE_OPTION_NONE); + NSUnLinkModule((NSModule)_handle, NSUNLINKMODULE_OPTION_NONE); } void* SharedLib::operator[](const char* symbol) throw(RuntimeError) { - NSSymbol addr = NSLookupSymbolInModule((NSModule)_handle, symbol); - if(!addr) + if( ! symbol ) + { + throw RuntimeError( "Invalid symbol (null).", P_SOURCEINFO ); + } + + NSSymbol addr = NSLookupSymbolInModule((NSModule)_handle, symbol); + if(!addr) throw RuntimeError("Symbol not found in shared library", P_SOURCEINFO); - return (void*)addr; + return (void*)addr; } const char* SharedLib::extension() Index: SharedLib.generic.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/System/SharedLib.generic.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- SharedLib.generic.cpp 25 Dec 2004 07:02:16 -0000 1.7 +++ SharedLib.generic.cpp 25 Dec 2004 16:02:51 -0000 1.8 @@ -11,7 +11,10 @@ void* SharedLib::operator[](const std::string& symbol) throw(RuntimeError) { - return operator[](symbol.c_str()); + return operator[](symbol.empty() ? 0 : symbol.c_str()); + // ^^^ the 0 is to force operator[const char*] to throw a + // runtime error. We don't throw it here because we want to + // inherit the platform-specific op[char*]'s throw behaviour. } /** Index: SharedLib.dl.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/System/SharedLib.dl.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- SharedLib.dl.cpp 25 Dec 2004 07:02:16 -0000 1.7 +++ SharedLib.dl.cpp 25 Dec 2004 16:02:51 -0000 1.8 @@ -129,6 +129,10 @@ void* SharedLib::operator[](const char* symbol) throw(RuntimeError) { + if( ! symbol ) + { + throw RuntimeError( "Invalid symbol (null).", P_SOURCEINFO ); + } void* addr = dlsym((void*)_handle, symbol); if(!addr) throw RuntimeError("Symbol not found in shared library", P_SOURCEINFO); Index: SharedLib.win32.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/System/SharedLib.win32.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- SharedLib.win32.cpp 25 Dec 2004 07:02:16 -0000 1.5 +++ SharedLib.win32.cpp 25 Dec 2004 16:02:51 -0000 1.6 @@ -82,6 +82,10 @@ void* SharedLib::operator[](const char* symbol) throw(RuntimeError) { + if( ! symbol ) + { + throw RuntimeError( "Invalid symbol (null).", P_SOURCEINFO ); + } void* addr = GetProcAddress((HMODULE)_handle, symbol); if(!addr) throw RuntimeError("Symbol not found in shared library", P_SOURCEINFO); Index: SharedLib.shl.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/System/SharedLib.shl.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- SharedLib.shl.cpp 25 Dec 2004 07:02:16 -0000 1.5 +++ SharedLib.shl.cpp 25 Dec 2004 16:02:51 -0000 1.6 @@ -104,6 +104,11 @@ void* SharedLib::operator[](const char* symbol) throw(RuntimeError) { + if( ! symbol ) + { + throw RuntimeError( "Invalid symbol (null).", P_SOURCEINFO ); + } + void* address = 0; if(shl_findsym((shl_t*)&_handle, symbol, TYPE_UNDEFINED, (void*)&address)) != 0) throw RuntimeError("Symbol not found in shared library", P_SOURCEINFO); |