summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2012-11-06 16:15:57 +0100
committerStephan Bergmann <sbergman@redhat.com>2012-11-06 16:20:55 +0100
commit8246bdb500a6d83ea9b61f58fb74e051432e32d7 (patch)
tree7d7bf82975e5726701c0a67831b73fafd0fde165
parent4de42d02f865464057ca5681c67f63fece355173 (diff)
fdo#55138: Do not double-expand bootstrap variables
For some reason that escapes me now, the old code double-expanded URLs in CONFIGURATION_LAYERS and in extension layer's configmgr.ini SCHEMA/DATA. That produced wrong results when the pathnames represented by those URLs contain any "$" characters, as apparently routinely happens on Windows with roaming profiles. Change-Id: Iff149e7d8736cbcda579376cdc89e24cf99ccc97
-rw-r--r--configmgr/source/components.cxx13
-rw-r--r--configmgr/source/components.hxx7
2 files changed, 7 insertions, 13 deletions
diff --git a/configmgr/source/components.cxx b/configmgr/source/components.cxx
index 2a0bffc31b82..6476cd841fd5 100644
--- a/configmgr/source/components.cxx
+++ b/configmgr/source/components.cxx
@@ -527,7 +527,7 @@ Components::Components(
n = conf.getLength();
}
rtl::OUString type(conf.copy(i, c - i));
- rtl::OUString url(expand(conf.copy(c + 1, n - c - 1)));
+ rtl::OUString url(conf.copy(c + 1, n - c - 1));
if ( type == "xcsxcu" ) {
parseXcsXcuLayer(layer, url);
layer += 2; //TODO: overflow
@@ -684,12 +684,11 @@ void Components::parseFiles(
void Components::parseFileList(
int layer, FileParser * parseFile, rtl::OUString const & urls,
- rtl::Bootstrap const & ini, bool recordAdditions)
+ bool recordAdditions)
{
for (sal_Int32 i = 0;;) {
rtl::OUString url(urls.getToken(0, ' ', i));
if (!url.isEmpty()) {
- ini.expandMacrosFrom(url); //TODO: detect failure
Additions * adds = 0;
if (recordAdditions) {
adds = data_.addExtensionXcuAdditions(url, layer);
@@ -819,9 +818,7 @@ void Components::parseXcsXcuIniLayer(
// 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);
- if (ini.getHandle() != 0)
- {
+ if (rtl::Bootstrap(url).getHandle() != 0) {
rtl::OUStringBuffer prefix("${.override:");
for (sal_Int32 i = 0; i != url.getLength(); ++i) {
sal_Unicode c = url[i];
@@ -840,13 +837,13 @@ void Components::parseXcsXcuIniLayer(
rtl::Bootstrap::expandMacros(urls);
if (!urls.isEmpty())
{
- parseFileList(layer, &parseXcsFile, urls, ini, false);
+ parseFileList(layer, &parseXcsFile, urls, false);
}
urls = prefix.makeStringAndClear() + rtl::OUString("DATA}");
rtl::Bootstrap::expandMacros(urls);
if (!urls.isEmpty())
{
- parseFileList(layer + 1, &parseXcuFile, urls, ini, recordAdditions);
+ parseFileList(layer + 1, &parseXcuFile, urls, recordAdditions);
}
}
}
diff --git a/configmgr/source/components.hxx b/configmgr/source/components.hxx
index c898a84b4657..70f7669b9a63 100644
--- a/configmgr/source/components.hxx
+++ b/configmgr/source/components.hxx
@@ -43,10 +43,7 @@ namespace com { namespace sun { namespace star {
class XComponentContext;
}
} } }
-namespace rtl {
- class Bootstrap;
- class OUString;
-}
+namespace rtl { class OUString; }
namespace configmgr {
@@ -132,7 +129,7 @@ private:
void parseFileList(
int layer, FileParser * parseFile, rtl::OUString const & urls,
- rtl::Bootstrap const & ini, bool recordAdditions);
+ bool recordAdditions);
void parseXcdFiles(int layer, rtl::OUString const & url);