configmgr/source/components.cxx | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-)
New commits: commit 4f78696117ebe4f729880b5d9bfc2f5817b73543 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Mar 15 09:34:56 2012 +0100 fdo#42961 Don't let env vars interfere with internal bootstrap vars Signed-off-by: Michael Meeks <michael.me...@suse.com> diff --git a/configmgr/source/components.cxx b/configmgr/source/components.cxx index 48d555e..a341d84 100644 --- a/configmgr/source/components.cxx +++ b/configmgr/source/components.cxx @@ -54,6 +54,7 @@ #include "rtl/oustringostreaminserter.hxx" #include "rtl/ref.hxx" #include "rtl/string.h" +#include "rtl/ustrbuf.hxx" #include "rtl/ustring.h" #include "rtl/ustring.hxx" #include "rtl/instance.hxx" @@ -838,17 +839,38 @@ void Components::parseXcsXcuLayer(int layer, rtl::OUString const & url) { void Components::parseXcsXcuIniLayer( int layer, rtl::OUString const & url, bool recordAdditions) { - //TODO: rtl::Bootstrap::getFrom "first trie[s] to retrieve the value via the - // global function" + // Check if ini file exists (otherwise .override would still read global + // SCHEMA/DATA variables, which could interfere with unrelated environment + // variables): rtl::Bootstrap ini(url); - rtl::OUString urls; - if (ini.getFrom(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SCHEMA")), urls)) + if (ini.getHandle() != 0) { - parseFileList(layer, &parseXcsFile, urls, ini, false); - } - if (ini.getFrom(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DATA")), urls)) - { - parseFileList(layer + 1, &parseXcuFile, urls, ini, recordAdditions); + rtl::OUStringBuffer prefix("${.override:"); + for (sal_Int32 i = 0; i != url.getLength(); ++i) { + sal_Unicode c = url[i]; + switch (c) { + case '$': + case ':': + case '\\': + prefix.append('\\'); + // fall through + default: + prefix.append(c); + } + } + prefix.append(':'); + rtl::OUString urls(prefix.toString() + rtl::OUString("SCHEMA}")); + rtl::Bootstrap::expandMacros(urls); + if (!urls.isEmpty()) + { + parseFileList(layer, &parseXcsFile, urls, ini, false); + } + urls = prefix.makeStringAndClear() + rtl::OUString("DATA}"); + rtl::Bootstrap::expandMacros(urls); + if (!urls.isEmpty()) + { + parseFileList(layer + 1, &parseXcuFile, urls, ini, recordAdditions); + } } } _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits