diff options
author | Tor Lillqvist <tml@iki.fi> | 2012-10-07 07:52:26 +0300 |
---|---|---|
committer | Tor Lillqvist <tml@iki.fi> | 2012-10-07 07:59:15 +0300 |
commit | 97593ae24a98daca89fad176dc2492e582b3a821 (patch) | |
tree | f52189545a5c5ffbc7cece7bca595b2cd18c9cc0 /svtools | |
parent | When DISABLE_DYNLOADING don't even provide any module loading/unloading API (diff) | |
download | core-97593ae24a98daca89fad176dc2492e582b3a821.tar.gz core-97593ae24a98daca89fad176dc2492e582b3a821.zip |
Handle lack of module loading/unloading API when DISABLE_DYNLOADING
There are basicically two classes of cases:
1) Where the code is for obscure historical reasons or what I see as
misguided "optimization" split into a more libraries than necessary,
and these then are loaded at run-time. Instead, just use direct
linking.
2) Where dynamic loading is part of the functionality offered to some
upper (scripting etc) layer, or where some system-specific non-LO
library is loaded dynamically, as it is not necessarily present on
end-user machines. Can't have such in the DISABLE_DYNLOADING case.
Change-Id: I9eceac5fb635245def2f4f3320821447bb7cd8c0
Diffstat (limited to 'svtools')
-rw-r--r-- | svtools/source/filter/filter.cxx | 94 | ||||
-rw-r--r-- | svtools/source/misc/svtaccessiblefactory.cxx | 9 |
2 files changed, 101 insertions, 2 deletions
diff --git a/svtools/source/filter/filter.cxx b/svtools/source/filter/filter.cxx index aaacb12884f8..6428c2ea6b4b 100644 --- a/svtools/source/filter/filter.cxx +++ b/svtools/source/filter/filter.cxx @@ -915,7 +915,9 @@ class ImpFilterLibCache; struct ImpFilterLibCacheEntry { ImpFilterLibCacheEntry* mpNext; +#ifndef DISABLE_DYNLOADING osl::Module maLibrary; +#endif String maFiltername; PFilterCall mpfnImport; PFilterDlgCall mpfnImportDlg; @@ -930,19 +932,67 @@ struct ImpFilterLibCacheEntry ImpFilterLibCacheEntry::ImpFilterLibCacheEntry( const String& rPathname, const String& rFiltername ) : mpNext ( NULL ), +#ifndef DISABLE_DYNLOADING maLibrary ( rPathname ), +#endif maFiltername ( rFiltername ), mpfnImport ( NULL ), mpfnImportDlg ( NULL ) { +#ifdef DISABLE_DYNLOADING + (void) rPathname; +#endif } // ------------------------------------------------------------------------ +#ifdef DISABLE_DYNLOADING + +extern "C" sal_Bool icdGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool idxGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool imeGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool ipbGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool ipdGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool ipsGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool iptGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool ipxGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool iraGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool itgGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool itiGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); + +#endif + PFilterCall ImpFilterLibCacheEntry::GetImportFunction() { if( !mpfnImport ) + { +#ifndef DISABLE_DYNLOADING mpfnImport = (PFilterCall) maLibrary.getFunctionSymbol(rtl::OUString(IMPORT_FUNCTION_NAME)); +#else + if( maFiltername.EqualsAscii( "icd" ) ) + mpfnImport = icdGraphicImport; + else if( maFiltername.EqualsAscii( "idx" ) ) + mpfnImport = idxGraphicImport; + else if( maFiltername.EqualsAscii( "ime" ) ) + mpfnImport = imeGraphicImport; + else if( maFiltername.EqualsAscii( "ipb" ) ) + mpfnImport = ipbGraphicImport; + else if( maFiltername.EqualsAscii( "ipd" ) ) + mpfnImport = ipdGraphicImport; + else if( maFiltername.EqualsAscii( "ips" ) ) + mpfnImport = ipsGraphicImport; + else if( maFiltername.EqualsAscii( "ipt" ) ) + mpfnImport = iptGraphicImport; + else if( maFiltername.EqualsAscii( "ipx" ) ) + mpfnImport = ipxGraphicImport; + else if( maFiltername.EqualsAscii( "ira" ) ) + mpfnImport = iraGraphicImport; + else if( maFiltername.EqualsAscii( "itg" ) ) + mpfnImport = itgGraphicImport; + else if( maFiltername.EqualsAscii( "iti" ) ) + mpfnImport = itiGraphicImport; +#endif + } return mpfnImport; } @@ -1003,19 +1053,22 @@ ImpFilterLibCacheEntry* ImpFilterLibCache::GetFilter( const String& rFilterPath, { String aPhysicalName( ImpCreateFullFilterPath( rFilterPath, rFilterName ) ); pEntry = new ImpFilterLibCacheEntry( aPhysicalName, rFilterName ); - +#ifndef DISABLE_DYNLOADING if ( pEntry->maLibrary.is() ) +#endif { if( !mpFirst ) mpFirst = mpLast = pEntry; else mpLast = mpLast->mpNext = pEntry; } +#ifndef DISABLE_DYNLOADING else { delete pEntry; pEntry = NULL; } +#endif } return pEntry; }; @@ -1735,6 +1788,21 @@ sal_uInt16 GraphicFilter::ExportGraphic( const Graphic& rGraphic, const INetURLO // ------------------------------------------------------------------------ +#ifdef DISABLE_DYNLOADING + +extern "C" sal_Bool egiGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool emeGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool epbGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool epgGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool eppGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool epsGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool eptGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool eraGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool etiGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); +extern "C" sal_Bool expGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool ); + +#endif + sal_uInt16 GraphicFilter::ExportGraphic( const Graphic& rGraphic, const String& rPath, SvStream& rOStm, sal_uInt16 nFormat, const uno::Sequence< beans::PropertyValue >* pFilterData ) { @@ -2050,11 +2118,35 @@ sal_uInt16 GraphicFilter::ExportGraphic( const Graphic& rGraphic, const String& sal_Int32 i, nTokenCount = getTokenCount(aFilterPath, ';'); for ( i = 0; i < nTokenCount; i++ ) { +#ifndef DISABLE_DYNLOADING String aPhysicalName( ImpCreateFullFilterPath( getToken(aFilterPath, i, ';'), aFilterName ) ); osl::Module aLibrary( aPhysicalName ); PFilterCall pFunc = (PFilterCall) aLibrary.getFunctionSymbol(rtl::OUString(EXPORT_FUNCTION_NAME)); // Dialog in DLL ausfuehren +#else + PFilterCall pFunc = NULL; + if( aFilterName.EqualsAscii( "egi" ) ) + pFunc = egiGraphicExport; + else if( aFilterName.EqualsAscii( "eme" ) ) + pFunc = emeGraphicExport; + else if( aFilterName.EqualsAscii( "epb" ) ) + pFunc = epbGraphicExport; + else if( aFilterName.EqualsAscii( "epg" ) ) + pFunc = epgGraphicExport; + else if( aFilterName.EqualsAscii( "epp" ) ) + pFunc = eppGraphicExport; + else if( aFilterName.EqualsAscii( "eps" ) ) + pFunc = epsGraphicExport; + else if( aFilterName.EqualsAscii( "ept" ) ) + pFunc = eptGraphicExport; + else if( aFilterName.EqualsAscii( "era" ) ) + pFunc = eraGraphicExport; + else if( aFilterName.EqualsAscii( "eti" ) ) + pFunc = etiGraphicExport; + else if( aFilterName.EqualsAscii( "exp" ) ) + pFunc = expGraphicExport; +#endif if( pFunc ) { if ( !(*pFunc)( rOStm, aGraphic, &aConfigItem, sal_False ) ) diff --git a/svtools/source/misc/svtaccessiblefactory.cxx b/svtools/source/misc/svtaccessiblefactory.cxx index f08fb7db1aac..013e946bba95 100644 --- a/svtools/source/misc/svtaccessiblefactory.cxx +++ b/svtools/source/misc/svtaccessiblefactory.cxx @@ -265,7 +265,11 @@ namespace svt } //-------------------------------------------------------------------- +#ifndef DISABLE_DYNLOADING extern "C" { static void SAL_CALL thisModule() {} } +#else + extern "C" void* getSvtAccessibilityComponentFactory(); +#endif void AccessibleFactoryAccess::ensureInitialized() { @@ -281,6 +285,7 @@ namespace svt // load the library implementing the factory if ( !s_pFactory.get() ) { +#ifndef DISABLE_DYNLOADING const ::rtl::OUString sModuleName( SVLIBRARY( "acc" )); s_hAccessibleImplementationModule = osl_loadModuleRelative( &thisModule, sModuleName.pData, 0 ); if ( s_hAccessibleImplementationModule != NULL ) @@ -291,7 +296,9 @@ namespace svt } OSL_ENSURE( s_pAccessibleFactoryFunc, "ac_registerClient: could not load the library, or not retrieve the needed symbol!" ); - +#else + s_pAccessibleFactoryFunc = getSvtAccessibilityComponentFactory; +#endif // get a factory instance if ( s_pAccessibleFactoryFunc ) { |