desktop/source/lib/init.cxx | 3 +++ include/vcl/graphicfilter.hxx | 2 ++ vcl/source/filter/graphicfilter.cxx | 26 ++++++++++++++++++++++++++ 3 files changed, 31 insertions(+)
New commits: commit ad8f4c4432e0c5c052b6f87977d1ad8663debe09 Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Thu Jul 4 11:57:27 2019 +0200 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Thu Jul 4 15:34:56 2019 +0200 vcl lok: pre-load graphic libraries This is needed to be able to load e.g. TIFF files in Online, which does not have code in the chroot since online.git commit ad21717498cc214d5d5d5c0ff378238552137e2f (Avoid copying most code into the chroot jail., 2018-03-10). Change-Id: Ib095191ee690d9da6269878a82b1c6995df50dfa Reviewed-on: https://gerrit.libreoffice.org/75077 Reviewed-by: Miklos Vajna <vmik...@collabora.com> Tested-by: Jenkins diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 97ba8d523e28..b014080b4aff 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -5038,6 +5038,9 @@ static int lo_initialize(LibreOfficeKit* pThis, const char* pAppPath, const char InitVCL(); } + // pre-load all graphic libraries. + GraphicFilter::GetGraphicFilter().preload(); + // pre-load all component libraries. if (!xContext.is()) throw css::uno::DeploymentException("preInit: XComponentContext is not created"); diff --git a/include/vcl/graphicfilter.hxx b/include/vcl/graphicfilter.hxx index 69fbc215ba77..b603d3479852 100644 --- a/include/vcl/graphicfilter.hxx +++ b/include/vcl/graphicfilter.hxx @@ -309,6 +309,8 @@ public: ErrCode compressAsPNG(const Graphic& rGraphic, SvStream& rOutputStream); + void preload(); + private: OUString aFilterPath; FilterConfigCache* pConfig; diff --git a/vcl/source/filter/graphicfilter.cxx b/vcl/source/filter/graphicfilter.cxx index 9742715aa4fd..937ec3cf20e6 100644 --- a/vcl/source/filter/graphicfilter.cxx +++ b/vcl/source/filter/graphicfilter.cxx @@ -68,6 +68,8 @@ #include <rtl/bootstrap.hxx> #include <rtl/instance.hxx> #include <vcl/metaact.hxx> +#include <tools/svlibrary.h> +#include <comphelper/string.hxx> #include <vector> #include <memory> @@ -1418,6 +1420,30 @@ Graphic GraphicFilter::ImportUnloadedGraphic(SvStream& rIStream, sal_uInt64 size return aGraphic; } +void GraphicFilter::preload() +{ + sal_Int32 nTokenCount = comphelper::string::getTokenCount(aFilterPath, ';'); + ImpFilterLibCache& rCache = Cache::get(); + static const std::initializer_list<OUStringLiteral> aFilterNames = { + "icd", "idx", "ime", "ipb", "ipd", "ips", "ipt", "ipx", "ira", "itg", "iti", + }; + + // Load library for each filter. + for (const auto& rFilterName : aFilterNames) + { + ImpFilterLibCacheEntry* pFilter = nullptr; + // Look at the library in each element inside the filter path. + for (sal_Int32 i = 0; i < nTokenCount; ++i) + { + pFilter = rCache.GetFilter(aFilterPath.getToken(i, ';'), SVLIBRARY("gie"), rFilterName); + if (pFilter) + { + break; + } + } + } +} + ErrCode GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPath, SvStream& rIStream, sal_uInt16 nFormat, sal_uInt16* pDeterminedFormat, GraphicFilterImportFlags nImportFlags, css::uno::Sequence< css::beans::PropertyValue >* pFilterData, _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits