diff options
Diffstat (limited to 'cppuhelper')
-rw-r--r-- | cppuhelper/source/shlib.cxx | 117 |
1 files changed, 24 insertions, 93 deletions
diff --git a/cppuhelper/source/shlib.cxx b/cppuhelper/source/shlib.cxx index 00c21d2a9108..09b70049ca0a 100644 --- a/cppuhelper/source/shlib.cxx +++ b/cppuhelper/source/shlib.cxx @@ -19,11 +19,7 @@ #include "sal/config.h" -#include "osl/diagnose.h" -#include "osl/file.hxx" -#include "osl/mutex.hxx" #include "osl/module.hxx" -#include "rtl/ustrbuf.hxx" #include "uno/environment.h" #include "uno/mapping.hxx" #include "cppuhelper/factory.hxx" @@ -47,67 +43,12 @@ using namespace ::com::sun::star::uno; using rtl::OString; using rtl::OUString; -using rtl::OUStringBuffer; namespace cppu { #ifndef DISABLE_DYNLOADING -static OUString makeComponentPath( - const OUString & rLibName, const OUString & rPath ) -{ -#if OSL_DEBUG_LEVEL > 0 - // No system path allowed here ! - { - OUString aComp; - OSL_ASSERT( FileBase::E_None == - FileBase::getSystemPathFromFileURL( rLibName, aComp ) ); - OSL_ASSERT( - rPath.isEmpty() || - FileBase::E_None == - FileBase::getSystemPathFromFileURL( rPath, aComp ) ); - } -#endif - - OUStringBuffer buf( rPath.getLength() + rLibName.getLength() + 12 ); - - if (!rPath.isEmpty()) - { - buf.append( rPath ); - if (rPath[ rPath.getLength() -1 ] != '/') - buf.append( (sal_Unicode) '/' ); - } - if (!rLibName.endsWithIgnoreAsciiCase( SAL_DLLEXTENSION ) -#if defined MACOSX - && !rLibName.endsWithIgnoreAsciiCase(".jnilib") -#endif - ) - { -#if defined SAL_DLLPREFIX - if (! rLibName.endsWithIgnoreAsciiCase( ".uno" )) - { - buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(SAL_DLLPREFIX) ); - } -#endif - buf.append( rLibName ); - buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(SAL_DLLEXTENSION) ); - } - else // name is completely pre/postfixed - { - buf.append( rLibName ); - } - - OUString out( buf.makeStringAndClear() ); -#if OSL_DEBUG_LEVEL > 1 - OString str( OUStringToOString( out, RTL_TEXTENCODING_ASCII_US ) ); - OSL_TRACE(OSL_LOG_PREFIX "component path=%s", str.getStr()); -#endif - - return out; -} - -//============================================================================== static void getLibEnv(oslModule lib, uno::Environment * pEnv, OUString * pSourceEnv_name, @@ -176,13 +117,12 @@ extern "C" {static void s_getFactory(va_list * pParam) /* For backwards compatibility */ Reference< XInterface > SAL_CALL loadSharedLibComponentFactory( - OUString const & rLibName, OUString const & rPath, - OUString const & rImplName, + OUString const & uri, OUString const & rPath, OUString const & rImplName, Reference< lang::XMultiServiceFactory > const & xMgr, Reference< registry::XRegistryKey > const & xKey ) SAL_THROW( (loader::CannotActivateFactoryException) ) { - return loadSharedLibComponentFactory( rLibName, rPath, rImplName, xMgr, xKey, rtl::OUString() ); + return loadSharedLibComponentFactory( uri, rPath, rImplName, xMgr, xKey, rtl::OUString() ); } namespace @@ -194,7 +134,6 @@ Reference< XInterface > invokeComponentFactory( OUString const & rModulePath, OUString const & rImplName, Reference< ::com::sun::star::lang::XMultiServiceFactory > const & xMgr, - Reference< ::com::sun::star::registry::XRegistryKey > const & xKey, OUString const & rPrefix, OUString &rExcMsg ) { @@ -244,18 +183,11 @@ Reference< XInterface > invokeComponentFactory( { void * pSMgr = aCurrent2Env.mapInterface( xMgr.get(), ::getCppuType( &xMgr ) ); - void * pKey = aCurrent2Env.mapInterface( - xKey.get(), ::getCppuType( &xKey ) ); void * pSSF = NULL; - env.invoke(s_getFactory, pGetter, &aImplName, pSMgr, pKey, &pSSF); + env.invoke(s_getFactory, pGetter, &aImplName, pSMgr, 0, &pSSF); - if (pKey) - { - (env.get()->pExtEnv->releaseInterface)( - env.get()->pExtEnv, pKey ); - } if (pSMgr) { (*env.get()->pExtEnv->releaseInterface)( @@ -325,35 +257,34 @@ extern "C" #endif Reference< XInterface > SAL_CALL loadSharedLibComponentFactory( - OUString const & rLibName, OUString const & rPath, - OUString const & rImplName, + OUString const & uri, OUString const & rPath, OUString const & rImplName, Reference< lang::XMultiServiceFactory > const & xMgr, Reference< registry::XRegistryKey > const & xKey, OUString const & rPrefix ) SAL_THROW( (loader::CannotActivateFactoryException) ) { + assert(rPath.isEmpty()); + assert(!xKey.is()); #ifndef DISABLE_DYNLOADING - OUString sLibName(rLibName); + OUString moduleUri(uri); #ifdef ANDROID - if ( rLibName.equals( "bootstrap.uno" SAL_DLLEXTENSION ) ) - sLibName = "libbootstrap.uno" SAL_DLLEXTENSION; + if ( uri == "bootstrap.uno" SAL_DLLEXTENSION ) + moduleUri = "libbootstrap.uno" SAL_DLLEXTENSION; #endif - OUString aModulePath( makeComponentPath( sLibName, rPath ) ); oslModule lib = osl_loadModule( - aModulePath.pData, SAL_LOADMODULE_LAZY | SAL_LOADMODULE_GLOBAL ); + moduleUri.pData, SAL_LOADMODULE_LAZY | SAL_LOADMODULE_GLOBAL ); if (! lib) { - OUString const msg("loading component library failed: " + aModulePath); + OUString const msg("loading component library failed: " + moduleUri); SAL_WARN("cppuhelper", msg); throw loader::CannotActivateFactoryException(msg, Reference< XInterface >() ); } #else - (void) rPath; oslModule lib; - OUString aModulePath("MAIN"); + OUString moduleUri("MAIN"); if (! osl_getModuleHandle( NULL, &lib)) { throw loader::CannotActivateFactoryException( @@ -407,7 +338,7 @@ Reference< XInterface > SAL_CALL loadSharedLibComponentFactory( }; for (int i = 0; pSym == NULL && non_app_specific_map[i].lib != NULL; ++i) { - if ( rLibName.equalsAscii( non_app_specific_map[i].lib ) ) + if ( uri.equalsAscii( non_app_specific_map[i].lib ) ) pSym = (oslGenericFunction) non_app_specific_map[i].component_getFactory_function; } @@ -417,12 +348,12 @@ Reference< XInterface > SAL_CALL loadSharedLibComponentFactory( const lib_to_component_mapping *map = lo_get_libmap(); for (int i = 0; pSym == NULL && map[i].lib != NULL; ++i) { - if ( rLibName.equalsAscii( map[i].lib ) ) + if ( uri.equalsAscii( map[i].lib ) ) pSym = (oslGenericFunction) map[i].component_getFactory_function; } if ( pSym == NULL ) { - fprintf( stderr, "attempting to load unknown library %s\n", OUStringToOString( rLibName, RTL_TEXTENCODING_ASCII_US ).getStr() ); + fprintf( stderr, "attempting to load unknown library %s\n", OUStringToOString( uri, RTL_TEXTENCODING_ASCII_US ).getStr() ); assert( !"Attempt to load unknown library" ); } } @@ -434,11 +365,11 @@ Reference< XInterface > SAL_CALL loadSharedLibComponentFactory( if (pSym != 0) { - xRet = invokeComponentFactory( pSym, lib, aModulePath, rImplName, xMgr, xKey, rPrefix, aExcMsg ); + xRet = invokeComponentFactory( pSym, lib, moduleUri, rImplName, xMgr, rPrefix, aExcMsg ); } else { - aExcMsg = aModulePath; + aExcMsg = moduleUri; aExcMsg += ": cannot get symbol: "; aExcMsg += aGetFactoryName; } @@ -471,17 +402,17 @@ extern "C" { static void s_writeInfo(va_list * pParam) }} void SAL_CALL writeSharedLibComponentInfo( - OUString const & rLibName, OUString const & rPath, + OUString const & uri, OUString const & rPath, Reference< lang::XMultiServiceFactory > const & xMgr, Reference< registry::XRegistryKey > const & xKey ) SAL_THROW( (registry::CannotRegisterImplementationException) ) { - OUString aModulePath( makeComponentPath( rLibName, rPath ) ); + assert(rPath.isEmpty()); oslModule lib = osl_loadModule( - aModulePath.pData, SAL_LOADMODULE_LAZY | SAL_LOADMODULE_GLOBAL ); + uri.pData, SAL_LOADMODULE_LAZY | SAL_LOADMODULE_GLOBAL ); if (! lib) { - OUString const msg("loading component library failed: " + aModulePath); + OUString const msg("loading component library failed: " + uri); SAL_WARN("cppuhelper", msg); throw registry::CannotRegisterImplementationException(msg, Reference< XInterface >() ); @@ -522,7 +453,7 @@ void SAL_CALL writeSharedLibComponentInfo( env.get()->pExtEnv, pKey ); if (! bRet) { - aExcMsg = aModulePath; + aExcMsg = uri; aExcMsg += ": component_writeInfo() " "returned false!"; } @@ -530,7 +461,7 @@ void SAL_CALL writeSharedLibComponentInfo( else { // key is mandatory - aExcMsg = aModulePath; + aExcMsg = uri; aExcMsg += ": registry is mandatory to invoke" " component_writeInfo()!"; } @@ -553,7 +484,7 @@ void SAL_CALL writeSharedLibComponentInfo( } else { - aExcMsg = aModulePath; + aExcMsg = uri; aExcMsg += ": cannot get symbol: "; aExcMsg += aWriteInfoName; } |