summaryrefslogtreecommitdiff
path: root/cppuhelper
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@collabora.com>2018-02-10 17:27:42 +0100
committerMichael Meeks <michael.meeks@collabora.com>2018-02-11 00:05:57 +0100
commitf215096c24429fe69e7e5ab37898d0f0beeff0ab (patch)
treedf513396a50fc3e6a3282dfba98efd48ed3de270 /cppuhelper
parent273d0ee7b7edb24c2c9e15e9f4337f71c175801a (diff)
lok: allow libraries to pre-init themselves.
Populate static module references before entering a jail containing no code. Implement for scfilt, scui, swui, sdui. Change-Id: I8fec2aa78e67053a7945926c818122bd4290103c Reviewed-on: https://gerrit.libreoffice.org/49545 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
Diffstat (limited to 'cppuhelper')
-rw-r--r--cppuhelper/source/servicemanager.cxx13
1 files changed, 13 insertions, 0 deletions
diff --git a/cppuhelper/source/servicemanager.cxx b/cppuhelper/source/servicemanager.cxx
index d51ce6bd6292..014b8ea91817 100644
--- a/cppuhelper/source/servicemanager.cxx
+++ b/cppuhelper/source/servicemanager.cxx
@@ -1974,6 +1974,19 @@ void cppuhelper::ServiceManager::preloadImplementations() {
iterator->second->status = Data::Implementation::STATUS_LOADED;
}
+
+ // Some libraries use other (non-UNO) libraries requiring preinit
+ oslGenericFunction fpPreload = aModule.getFunctionSymbol( "lok_preload_hook" );
+ if (fpPreload)
+ {
+ static std::vector<oslGenericFunction> aPreloaded;
+ if (std::find(aPreloaded.begin(), aPreloaded.end(), fpPreload) == aPreloaded.end())
+ {
+ aPreloaded.push_back(fpPreload);
+ fpPreload();
+ }
+ }
+
// leak aModule
aModule.release();
}