From f215096c24429fe69e7e5ab37898d0f0beeff0ab Mon Sep 17 00:00:00 2001 From: Michael Meeks Date: Sat, 10 Feb 2018 17:27:42 +0100 Subject: 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 Reviewed-by: Michael Meeks --- cppuhelper/source/servicemanager.cxx | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'cppuhelper') 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 aPreloaded; + if (std::find(aPreloaded.begin(), aPreloaded.end(), fpPreload) == aPreloaded.end()) + { + aPreloaded.push_back(fpPreload); + fpPreload(); + } + } + // leak aModule aModule.release(); } -- cgit