[Libreoffice-commits] .: 3 commits - configmgr/source sal/CppunitTest_sal_rtl_bootstrap.mk sal/Module_sal.mk sal/qa sal/rtl
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Tue Nov 6 07:21:34 PST 2012
configmgr/source/components.cxx | 13 ++-----
configmgr/source/components.hxx | 7 +---
sal/CppunitTest_sal_rtl_bootstrap.mk | 21 ++++++++++++
sal/Module_sal.mk | 1
sal/qa/rtl/bootstrap/expand.cxx | 60 +++++++++++++++++++++++++++++++++++
sal/rtl/source/bootstrap.cxx | 20 +++++------
6 files changed, 99 insertions(+), 23 deletions(-)
New commits:
commit 8246bdb500a6d83ea9b61f58fb74e051432e32d7
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Tue Nov 6 16:15:57 2012 +0100
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
diff --git a/configmgr/source/components.cxx b/configmgr/source/components.cxx
index 2a0bffc..6476cd8 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 c898a84..70f7669 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);
commit 4de42d02f865464057ca5681c67f63fece355173
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Tue Nov 6 16:13:57 2012 +0100
Add some rtl::Bootstrap unit test
...there is still additional old cruft in sal/qa/rtl/bootstrap/, some of it
might be worthwhile to resurrect.
Change-Id: Ie334431abc8de839fa2e655cbd3dc4d014c38f15
diff --git a/sal/CppunitTest_sal_rtl_bootstrap.mk b/sal/CppunitTest_sal_rtl_bootstrap.mk
new file mode 100644
index 0000000..f5771ea
--- /dev/null
+++ b/sal/CppunitTest_sal_rtl_bootstrap.mk
@@ -0,0 +1,21 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_CppunitTest_CppunitTest,sal_rtl_bootstrap))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,sal_rtl_bootstrap, \
+ sal/qa/rtl/bootstrap/expand \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,sal_rtl_bootstrap, \
+ sal \
+ $(gb_UWINAPI) \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sal/Module_sal.mk b/sal/Module_sal.mk
index a2c937d..8bb3c73 100644
--- a/sal/Module_sal.mk
+++ b/sal/Module_sal.mk
@@ -63,6 +63,7 @@ $(eval $(call gb_Module_add_check_targets,sal,\
CppunitTest_sal_osl_security \
CppunitTest_sal_osl_thread \
CppunitTest_sal_rtl_alloc \
+ CppunitTest_sal_rtl_bootstrap \
CppunitTest_sal_rtl_cipher \
CppunitTest_sal_rtl_crc32 \
CppunitTest_sal_rtl_doublelock \
diff --git a/sal/qa/rtl/bootstrap/expand.cxx b/sal/qa/rtl/bootstrap/expand.cxx
new file mode 100644
index 0000000..9aad9dd
--- /dev/null
+++ b/sal/qa/rtl/bootstrap/expand.cxx
@@ -0,0 +1,60 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "sal/config.h"
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+#include "cppunit/plugin/TestPlugIn.h"
+#include "rtl/bootstrap.hxx"
+#include "rtl/ustring.hxx"
+
+namespace {
+
+class Test: public CppUnit::TestFixture {
+public:
+ virtual void setUp();
+
+private:
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testDollar);
+ CPPUNIT_TEST(testIndirectDollar);
+ CPPUNIT_TEST_SUITE_END();
+
+ void testDollar();
+
+ void testIndirectDollar();
+};
+
+void Test::setUp() {
+ rtl::Bootstrap::set("TEST", "<expanded TEST>");
+ rtl::Bootstrap::set("WITH_DOLLAR", "foo\\$TEST");
+ rtl::Bootstrap::set("INDIRECT", "$WITH_DOLLAR");
+}
+
+void Test::testDollar() {
+ rtl::OUString s("$WITH_DOLLAR");
+ rtl::Bootstrap::expandMacros(s);
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("foo$TEST"), s);
+}
+
+void Test::testIndirectDollar() {
+ rtl::OUString s("$INDIRECT");
+ rtl::Bootstrap::expandMacros(s);
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("foo$TEST"), s);
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit c6d03e72014d15825a47aab3c2a1bc73cbba2df8
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Tue Nov 6 12:54:39 2012 +0100
Some white-space clean-up
Change-Id: Ice25e13891865c2c7a223a3708d200272645140d
diff --git a/sal/rtl/source/bootstrap.cxx b/sal/rtl/source/bootstrap.cxx
index 7bdc82c..e455853 100644
--- a/sal/rtl/source/bootstrap.cxx
+++ b/sal/rtl/source/bootstrap.cxx
@@ -291,14 +291,14 @@ Bootstrap_Impl::Bootstrap_Impl( OUString const & rIniName )
line.copy(nIndex+1).trim(), RTL_TEXTENCODING_UTF8 );
#if OSL_DEBUG_LEVEL > 1
- OString name_tmp = OUStringToOString(sName, RTL_TEXTENCODING_ASCII_US);
- OString value_tmp = OUStringToOString(sValue, RTL_TEXTENCODING_UTF8);
+ OString name_tmp = OUStringToOString(sName, RTL_TEXTENCODING_ASCII_US);
+ OString value_tmp = OUStringToOString(sValue, RTL_TEXTENCODING_UTF8);
OSL_TRACE(
"pushing: name=%s value=%s",
name_tmp.getStr(), value_tmp.getStr() );
#endif /* OSL_DEBUG_LEVEL > 1 */
- map_[sName] = sValue;
+ map_[sName] = sValue;
}
}
osl_closeFile(handle);
@@ -473,24 +473,24 @@ bool Bootstrap_Impl::getValue(
if (override && getDirectValue(key, value, mode, requestStack)) {
return true;
}
- if ( key == "_OS" ) {
+ if (key == "_OS") {
rtl_uString_assign(
value, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(RTL_OS)).pData);
return true;
}
- if ( key == "_ARCH" ) {
+ if (key == "_ARCH") {
rtl_uString_assign(
value, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(RTL_ARCH)).pData);
return true;
}
- if ( key == "_CPPU_ENV" ) {
+ if (key == "_CPPU_ENV") {
rtl_uString_assign(
value,
(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(MY_STRING(CPPU_ENV))).
pData));
return true;
}
- if ( key == "ORIGIN" ) {
+ if (key == "ORIGIN") {
rtl_uString_assign(
value,
_iniName.copy(
@@ -500,21 +500,21 @@ bool Bootstrap_Impl::getValue(
if (getAmbienceValue(key, value, mode, requestStack)) {
return true;
}
- if ( key == "SYSUSERCONFIG" ) {
+ if (key == "SYSUSERCONFIG") {
rtl::OUString v;
bool b = osl::Security().getConfigDir(v);
EnsureNoFinalSlash(v);
rtl_uString_assign(value, v.pData);
return b;
}
- if ( key == "SYSUSERHOME" ) {
+ if (key == "SYSUSERHOME") {
rtl::OUString v;
bool b = osl::Security().getHomeDir(v);
EnsureNoFinalSlash(v);
rtl_uString_assign(value, v.pData);
return b;
}
- if ( key == "SYSBINDIR" ) {
+ if (key == "SYSBINDIR") {
getExecutableDirectory_Impl(value);
return true;
}
More information about the Libreoffice-commits
mailing list