summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt1
-rw-r--r--Schemas/Parameter.xsd18
-rw-r--r--bindings/python/Android.mk1
-rw-r--r--bindings/python/CMakeLists.txt20
-rw-r--r--bindings/python/pfw.i4
-rw-r--r--parameter/Android.mk3
-rw-r--r--parameter/CMakeLists.txt1
-rw-r--r--[-rwxr-xr-x]parameter/IntegerParameterType.cpp0
-rw-r--r--[-rwxr-xr-x]parameter/IntegerParameterType.h0
-rw-r--r--parameter/LinearParameterAdaptation.cpp7
-rw-r--r--parameter/LinearParameterAdaptation.h3
-rw-r--r--parameter/LogarithmicParameterAdaptation.cpp89
-rw-r--r--parameter/LogarithmicParameterAdaptation.h71
-rw-r--r--parameter/ParameterAccessContext.cpp2
-rw-r--r--parameter/ParameterAccessContext.h15
-rw-r--r--parameter/ParameterMgr.cpp95
-rw-r--r--parameter/ParameterMgr.h21
-rw-r--r--parameter/ParameterMgrFullConnector.cpp5
-rw-r--r--parameter/ParameterMgrPlatformConnector.cpp6
-rw-r--r--[-rwxr-xr-x]parameter/ParameterType.cpp0
-rw-r--r--[-rwxr-xr-x]parameter/ParameterType.h0
-rw-r--r--parameter/SelectionCriterion.cpp13
-rw-r--r--parameter/SelectionCriterion.h9
-rw-r--r--parameter/SelectionCriterionType.cpp23
-rw-r--r--parameter/SelectionCriterionType.h9
-rw-r--r--[-rwxr-xr-x]parameter/SubsystemObject.cpp0
-rw-r--r--[-rwxr-xr-x]parameter/SubsystemObject.h0
-rw-r--r--parameter/SystemClass.cpp26
-rw-r--r--parameter/SystemClass.h5
-rw-r--r--[-rwxr-xr-x]parameter/TypeElement.cpp0
-rw-r--r--[-rwxr-xr-x]parameter/TypeElement.h0
-rw-r--r--parameter/include/ParameterMgrFullConnector.h10
-rw-r--r--remote-process/main.cpp3
-rw-r--r--remote-processor/RemoteProcessorServer.cpp3
-rw-r--r--test/test-platform/TestPlatform.cpp238
-rw-r--r--tools/bash_completion/CMakeLists.txt30
-rw-r--r--tools/bash_completion/remote-process131
-rwxr-xr-xtools/xmlGenerator/hostDomainGenerator.sh2
-rw-r--r--xmlserializer/XmlElement.cpp7
-rw-r--r--xmlserializer/XmlElement.h8
-rw-r--r--xmlserializer/XmlStringDocSink.cpp3
41 files changed, 670 insertions, 212 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 847d606..696e4a0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -49,6 +49,7 @@ enable_testing()
add_subdirectory(test/test-platform)
add_subdirectory(test/test-fixed-point-parameter)
+add_subdirectory(tools/bash_completion)
add_subdirectory(tools/xmlGenerator)
add_subdirectory(tools/xmlValidator)
diff --git a/Schemas/Parameter.xsd b/Schemas/Parameter.xsd
index 3b635fc..f174b6e 100644
--- a/Schemas/Parameter.xsd
+++ b/Schemas/Parameter.xsd
@@ -34,12 +34,21 @@
<xs:complexType name="Adaptation">
<xs:attribute name="Offset" type="xs:integer" default="0"/>
</xs:complexType>
- <xs:element name="LinearAdaptation">
+ <xs:complexType name="LinearAdaptationType">
+ <xs:complexContent>
+ <xs:extension base="Adaptation">
+ <xs:attribute name="SlopeNumerator" type="xs:double" default="1"/>
+ <xs:attribute name="SlopeDenominator" type="xs:double" default="1"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="LinearAdaptation" type="LinearAdaptationType"/>
+ <xs:element name="LogarithmicAdaptation">
<xs:complexType>
<xs:complexContent>
- <xs:extension base="Adaptation">
- <xs:attribute name="SlopeNumerator" type="xs:double" default="1"/>
- <xs:attribute name="SlopeDenominator" type="xs:double" default="1"/>
+ <xs:extension base="LinearAdaptationType">
+ <xs:attribute name="LogarithmBase" type="xs:double" default="10"/>
+ <xs:attribute name="FloorValue" type="xs:double" default="-INF"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
@@ -63,6 +72,7 @@
<xs:extension base="Parameter">
<xs:choice minOccurs="0">
<xs:element ref="LinearAdaptation"/>
+ <xs:element ref="LogarithmicAdaptation"/>
</xs:choice>
<xs:attributeGroup ref="IntegerParameterAttributes"/>
<xs:attribute name="Unit" type="xs:token" use="optional"/>
diff --git a/bindings/python/Android.mk b/bindings/python/Android.mk
index 296d4bc..0558344 100644
--- a/bindings/python/Android.mk
+++ b/bindings/python/Android.mk
@@ -76,6 +76,7 @@ $(generated-sources-dir)/pfw_wrap.h: $(generated-sources-dir)/pfw_wrap.cxx
$(generated-sources-dir)/pfw_wrap.cxx: $(LOCAL_PATH)/pfw.i
@echo "Generating Python binding files"
mkdir -p $(dir $@) # surprisingly, path is not generated by build system
+ mkdir -p $(HOST_LIBRARY_PATH)
prebuilts/misc/linux-x86_64/swig/swig \
-Iprebuilts/misc/common/swig/include/2.0.11/python/ \
-Iprebuilts/misc/common/swig/include/2.0.11/ \
diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt
index e9016b1..c159d96 100644
--- a/bindings/python/CMakeLists.txt
+++ b/bindings/python/CMakeLists.txt
@@ -26,25 +26,25 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-FIND_PACKAGE(SWIG REQUIRED)
-INCLUDE(${SWIG_USE_FILE})
+find_package(SWIG REQUIRED)
+include(${SWIG_USE_FILE})
-FIND_PACKAGE(PythonLibs)
-INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
+find_package(PythonLibs)
+include_directories(${PYTHON_INCLUDE_PATH})
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-SET_SOURCE_FILES_PROPERTIES(pfw.i PROPERTIES CPLUSPLUS ON)
-SET_SOURCE_FILES_PROPERTIES(pfw.i PROPERTIES SWIG_FLAGS "-v" "-Wall" "-Werror")
+set_property(SOURCE pfw.i PROPERTY CPLUSPLUS ON)
+set_property(SOURCE pfw.i PROPERTY SWIG_FLAGS "-Wall" "-Werror")
-SWIG_ADD_MODULE(PyPfw python pfw.i)
-SWIG_LINK_LIBRARIES(PyPfw parameter ${PYTHON_LIBRARIES})
+swig_add_module(PyPfw python pfw.i)
+swig_link_libraries(PyPfw parameter ${PYTHON_LIBRARIES})
include(FindPythonLibs)
if(NOT PYTHONLIBS_FOUND)
message(SEND_ERROR "python librarires not found. please instal python
development packages")
-endif(NOT PYTHONLIBS_FOUND)
+endif()
include_directories(${PROJECT_SOURCE_DIR}/parameter/include ${PYTHON_INCLUDE_DIRS})
diff --git a/bindings/python/pfw.i b/bindings/python/pfw.i
index ce27173..9dbccbd 100644
--- a/bindings/python/pfw.i
+++ b/bindings/python/pfw.i
@@ -169,10 +169,6 @@ public:
bool exportSingleDomainXml(std::string& strXmlDest, const std::string& strDomainName, bool bWithSettings,
bool bToFile, std::string& strError) const;
%clear std::string& strXmlDest;
-
-%apply std::string &OUTPUT { std::string& strResult }
- bool getSystemClassXMLString(std::string& strResult);
-%clear std::string& strResult;
};
// SWIG nested class support is not complete - cf.
diff --git a/parameter/Android.mk b/parameter/Android.mk
index 8592c52..90e33f0 100644
--- a/parameter/Android.mk
+++ b/parameter/Android.mk
@@ -79,6 +79,7 @@ common_src_files := \
InstanceDefinition.cpp \
IntegerParameterType.cpp \
LinearParameterAdaptation.cpp \
+ LogarithmicParameterAdaptation.cpp \
MappingContext.cpp \
MappingData.cpp \
ParameterAccessContext.cpp \
@@ -155,6 +156,8 @@ LOCAL_C_INCLUDES := $(common_c_includes)
LOCAL_SHARED_LIBRARIES := $(common_shared_libraries) libdl
LOCAL_STATIC_LIBRARIES := libxmlserializer libpfw_utility libxml2
+LOCAL_REQUIRED_MODULES := libremote-processor
+
LOCAL_CLANG := false
include external/stlport/libstlport.mk
include $(BUILD_SHARED_LIBRARY)
diff --git a/parameter/CMakeLists.txt b/parameter/CMakeLists.txt
index 9f93da7..94369fb 100644
--- a/parameter/CMakeLists.txt
+++ b/parameter/CMakeLists.txt
@@ -64,6 +64,7 @@ add_library(parameter SHARED
InstanceDefinition.cpp
IntegerParameterType.cpp
LinearParameterAdaptation.cpp
+ LogarithmicParameterAdaptation.cpp
MappingContext.cpp
MappingData.cpp
ParameterAccessContext.cpp
diff --git a/parameter/IntegerParameterType.cpp b/parameter/IntegerParameterType.cpp
index edc3d46..edc3d46 100755..100644
--- a/parameter/IntegerParameterType.cpp
+++ b/parameter/IntegerParameterType.cpp
diff --git a/parameter/IntegerParameterType.h b/parameter/IntegerParameterType.h
index 53bd4a8..53bd4a8 100755..100644
--- a/parameter/IntegerParameterType.h
+++ b/parameter/IntegerParameterType.h
diff --git a/parameter/LinearParameterAdaptation.cpp b/parameter/LinearParameterAdaptation.cpp
index 4be92a9..ea833b3 100644
--- a/parameter/LinearParameterAdaptation.cpp
+++ b/parameter/LinearParameterAdaptation.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2014, Intel Corporation
+ * Copyright (c) 2011-2015, Intel Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
@@ -37,6 +37,11 @@ CLinearParameterAdaptation::CLinearParameterAdaptation() : base("Linear"), _dSlo
{
}
+CLinearParameterAdaptation::CLinearParameterAdaptation(const string& strType) :
+ base(strType), _dSlopeNumerator(1), _dSlopeDenominator(1)
+{
+}
+
// Element properties
void CLinearParameterAdaptation::showProperties(string& strResult) const
{
diff --git a/parameter/LinearParameterAdaptation.h b/parameter/LinearParameterAdaptation.h
index f72f27b..8037c31 100644
--- a/parameter/LinearParameterAdaptation.h
+++ b/parameter/LinearParameterAdaptation.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2014, Intel Corporation
+ * Copyright (c) 2011-2015, Intel Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
@@ -37,6 +37,7 @@ class CLinearParameterAdaptation : public CParameterAdaptation
{
public:
CLinearParameterAdaptation();
+ CLinearParameterAdaptation(const std::string& strType);
// Conversions
virtual int64_t fromUserValue(double dValue) const;
diff --git a/parameter/LogarithmicParameterAdaptation.cpp b/parameter/LogarithmicParameterAdaptation.cpp
new file mode 100644
index 0000000..688527d
--- /dev/null
+++ b/parameter/LogarithmicParameterAdaptation.cpp
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2011-2015, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "LogarithmicParameterAdaptation.h"
+#include <math.h>
+
+#define base CLinearParameterAdaptation
+
+// M_E is the base of the natural logarithm for 'e' from math.h
+CLogarithmicParameterAdaptation::CLogarithmicParameterAdaptation() : base("Logarithmic"),
+ _dLogarithmBase(M_E), _dFloorValue(-INFINITY)
+{
+}
+
+// Element properties
+void CLogarithmicParameterAdaptation::showProperties(std::string& strResult) const
+{
+ base::showProperties(strResult);
+
+ strResult += " - LogarithmBase: ";
+ strResult += toString(_dLogarithmBase);
+ strResult += "\n";
+ strResult += " - FloorValue: ";
+ strResult += toString(_dFloorValue);
+ strResult += "\n";
+}
+
+bool CLogarithmicParameterAdaptation::fromXml(const CXmlElement& xmlElement,
+ CXmlSerializingContext& serializingContext)
+{
+
+ if (xmlElement.hasAttribute("LogarithmBase")) {
+
+ _dLogarithmBase = xmlElement.getAttributeDouble("LogarithmBase");
+
+ // Avoid negative and 1 values
+ if (_dLogarithmBase <= 0 || _dLogarithmBase == 1) {
+ serializingContext.setError("LogarithmBase attribute cannot be negative or 1 on element"
+ + xmlElement.getPath());
+
+ return false;
+ }
+ }
+
+ if (xmlElement.hasAttribute("FloorValue")) {
+ _dFloorValue = xmlElement.getAttributeDouble("FloorValue");
+ }
+ // Base
+ return base::fromXml(xmlElement, serializingContext);
+}
+
+
+int64_t CLogarithmicParameterAdaptation::fromUserValue(double dValue) const
+{
+ return fmax(round(base::fromUserValue(log(dValue) / log(_dLogarithmBase))),
+ _dFloorValue);
+}
+
+double CLogarithmicParameterAdaptation::toUserValue(int64_t iValue) const
+{
+ return exp(base::toUserValue(iValue) * log(_dLogarithmBase));
+}
diff --git a/parameter/LogarithmicParameterAdaptation.h b/parameter/LogarithmicParameterAdaptation.h
new file mode 100644
index 0000000..3b7fd4d
--- /dev/null
+++ b/parameter/LogarithmicParameterAdaptation.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2011-2015, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "LinearParameterAdaptation.h"
+
+/**
+ * This class is used to perform a logarithmic adapation of type:
+ * (slopeNumerator / slopeDenominator) * log(parameter) + offset
+ * Since log(x) == -INFINITY , we can define FloorValue as a
+ * x -> 0
+ * a lower bound limit for the adaptation
+ */
+class CLogarithmicParameterAdaptation : public CLinearParameterAdaptation
+{
+public:
+ CLogarithmicParameterAdaptation();
+
+ /**
+ * Conversions must satisfy the following: f(f'(a)) = a
+ * Let f=fromUserValue and f'=toUserValue
+ * if y = f(log(x)/log(base)), then
+ * f'(y) * log(base) = log (x)
+ * exp(f'(y)*log(base)) = x
+ */
+ virtual int64_t fromUserValue(double dValue) const;
+ virtual double toUserValue(int64_t iValue) const;
+
+ virtual void showProperties(std::string& strResult) const;
+
+ virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext);
+private:
+ /**
+ * _dLogarithmBase characterizes the new logarithm logB(x) with
+ * the following property: logB(x) = log(x) / log(_dLogarithmBase).
+ * log being the base-e logarithm.
+ */
+ double _dLogarithmBase;
+ /**
+ * _dFloorValue reflects the lower bound for volume attenuation
+ */
+ double _dFloorValue;
+};
diff --git a/parameter/ParameterAccessContext.cpp b/parameter/ParameterAccessContext.cpp
index bbbbd22..e228d9b 100644
--- a/parameter/ParameterAccessContext.cpp
+++ b/parameter/ParameterAccessContext.cpp
@@ -98,7 +98,7 @@ void CParameterAccessContext::setOutputRawFormat(bool bIsHex)
_bOutputRawFormatIsHex = bIsHex;
}
-bool CParameterAccessContext::outputRawFormatIsHex()
+bool CParameterAccessContext::outputRawFormatIsHex() const
{
return _bOutputRawFormatIsHex;
}
diff --git a/parameter/ParameterAccessContext.h b/parameter/ParameterAccessContext.h
index b59debb..302f920 100644
--- a/parameter/ParameterAccessContext.h
+++ b/parameter/ParameterAccessContext.h
@@ -57,9 +57,20 @@ public:
void setValueSpaceRaw(bool bIsRaw);
bool valueSpaceIsRaw() const;
- // Output Raw Format for user get value interpretation
+ /**
+ * Assigns Output Raw Format for user get value interpretation.
+ *
+ * @param[in] bIsHex "true" for hexadecimal, "false" for decimal
+ *
+ */
void setOutputRawFormat(bool bIsHex);
- bool outputRawFormatIsHex();
+ /**
+ * Returns Output Raw Format for user get value interpretation.
+ *
+ * @return "true" for hexadecimal, "false" for decimal
+ *
+ */
+ bool outputRawFormatIsHex() const;
// Endianness
void setBigEndianSubsystem(bool bBigEndian);
diff --git a/parameter/ParameterMgr.cpp b/parameter/ParameterMgr.cpp
index 4b8bdf6..fb09a7f 100644
--- a/parameter/ParameterMgr.cpp
+++ b/parameter/ParameterMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2014, Intel Corporation
+ * Copyright (c) 2011-2015, Intel Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
@@ -79,6 +79,7 @@
#include <assert.h>
#include "ParameterHandle.h"
#include "LinearParameterAdaptation.h"
+#include "LogarithmicParameterAdaptation.h"
#include "EnumValuePair.h"
#include "Subsystem.h"
#include "XmlFileDocSink.h"
@@ -87,8 +88,11 @@
#include "XmlStringDocSource.h"
#include "XmlMemoryDocSink.h"
#include "XmlMemoryDocSource.h"
+#include "SelectionCriteriaDefinition.h"
#include "Utility.h"
#include <sstream>
+#include <algorithm>
+#include <ctype.h>
#include <memory>
#define base CElement
@@ -160,7 +164,7 @@ const CParameterMgr::SRemoteCommandParserItem CParameterMgr::gastRemoteCommandPa
/// Criteria
{ "listCriteria", &CParameterMgr::listCriteriaCommmandProcess, 0,
- "[csv]", "List selection criteria" },
+ "[CSV|XML]", "List selection criteria" },
/// Domains
{ "listDomains", &CParameterMgr::listDomainsCommmandProcess, 0,
@@ -300,7 +304,7 @@ CParameterMgr::CParameterMgr(const string& strConfigurationFilePath) :
_pElementLibrarySet(new CElementLibrarySet),
_strXmlConfigurationFilePath(strConfigurationFilePath),
_pSubsystemPlugins(NULL),
- _handleLibRemoteProcessor(NULL),
+ _pvLibRemoteProcessorHandle(NULL),
_uiStructureChecksum(0),
_pRemoteProcessorServer(NULL),
_uiMaxCommandUsageLength(0),
@@ -358,8 +362,9 @@ CParameterMgr::~CParameterMgr()
delete _pElementLibrarySet;
// Close remote processor library
- if (_handleLibRemoteProcessor != NULL) {
- dlclose(_handleLibRemoteProcessor);
+ if (_pvLibRemoteProcessorHandle) {
+
+ dlclose(_pvLibRemoteProcessorHandle);
}
// Tuning Mode Mutex
@@ -454,6 +459,12 @@ bool CParameterMgr::load(string& strError)
return false;
}
+ // Init flow of element tree
+ if (!init(strError)) {
+
+ return false;
+ }
+
// Back synchronization for areas in parameter blackboard not covered by any domain
CBackSynchronizer* pBackSynchronizer = createBackSynchronizer();
@@ -1076,28 +1087,53 @@ CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::syncCommmandProcess
/// Criteria
CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::listCriteriaCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult)
{
- (void)remoteCommand;
+ if (remoteCommand.getArgumentCount() > 1) {
+
+ return CCommandHandler::EShowUsage;
+ }
- bool humanReadable = true;
+ string strOutputFormat;
// Look for optional arguments
- if (remoteCommand.getArgumentCount() >= 1) {
+ if (remoteCommand.getArgumentCount() == 1) {
+
+ // Get requested format
+ strOutputFormat = remoteCommand.getArgument(0);
+
+ // Capitalize
+ std::transform(strOutputFormat.begin(), strOutputFormat.end(), strOutputFormat.begin(), ::toupper);
+
+ if (strOutputFormat != "XML" && strOutputFormat != "CSV") {
- // If csv is provided, format the criterion list in Commas Separated Value pairs
- if (remoteCommand.getArgument(0) == "csv") {
- humanReadable = false;
- } else {
return CCommandHandler::EShowUsage;
}
}
- list<string> lstrResult;
- getSelectionCriteria()->listSelectionCriteria(lstrResult, true, humanReadable);
+ if (strOutputFormat == "XML") {
+ // Get Root element where to export from
+ const CSelectionCriteriaDefinition* pSelectionCriteriaDefinition = getConstSelectionCriteria()->getSelectionCriteriaDefinition();
- // Concatenate the criterion list as the command result
- CUtility::asString(lstrResult, strResult);
+ if (!exportElementToXMLString(pSelectionCriteriaDefinition, "SelectionCriteria",
+ strResult)) {
- return CCommandHandler::ESucceeded;
+ return CCommandHandler::EFailed;
+ }
+
+ // Succeeded
+ return CCommandHandler::ESucceeded;
+ } else {
+
+ // Requested format will be either CSV or human readable based on strOutputFormat content
+ bool bHumanReadable = strOutputFormat.empty();
+
+ list<string> lstrResult;
+ getSelectionCriteria()->listSelectionCriteria(lstrResult, true, bHumanReadable);
+
+ // Concatenate the criterion list as the command result
+ CUtility::asString(lstrResult, strResult);
+
+ return CCommandHandler::ESucceeded;
+ }
}
/// Domains
@@ -1639,7 +1675,10 @@ CParameterMgr::CCommandHandler::CommandStatus
{
(void)remoteCommand;
- if (!getSystemClassXMLString(strResult)) {
+ // Get Root element where to export from
+ const CSystemClass* pSystemClass = getSystemClass();
+
+ if (!exportElementToXMLString(pSystemClass, pSystemClass->getKind(), strResult)) {
return CCommandHandler::EFailed;
}
@@ -2409,6 +2448,7 @@ void CParameterMgr::feedElementLibraries()
pParameterCreationLibrary->addElementBuilder("BooleanParameter", new TNamedElementBuilderTemplate<CBooleanParameterType>());
pParameterCreationLibrary->addElementBuilder("IntegerParameter", new TNamedElementBuilderTemplate<CIntegerParameterType>());
pParameterCreationLibrary->addElementBuilder("LinearAdaptation", new TElementBuilderTemplate<CLinearParameterAdaptation>());
+ pParameterCreationLibrary->addElementBuilder("LogarithmicAdaptation", new TElementBuilderTemplate<CLogarithmicParameterAdaptation>());
pParameterCreationLibrary->addElementBuilder("EnumParameter", new TNamedElementBuilderTemplate<CEnumParameterType>());
pParameterCreationLibrary->addElementBuilder("ValuePair", new TElementBuilderTemplate<CEnumValuePair>());
pParameterCreationLibrary->addElementBuilder("FixedPointParameter", new TNamedElementBuilderTemplate<CFixedPointParameterType>());
@@ -2453,9 +2493,9 @@ bool CParameterMgr::handleRemoteProcessingInterface(string& strError)
log_info("Loading remote processor library");
// Load library
- _handleLibRemoteProcessor = dlopen("libremote-processor.so", RTLD_NOW);
+ _pvLibRemoteProcessorHandle = dlopen("libremote-processor.so", RTLD_NOW);
- if (!_handleLibRemoteProcessor) {
+ if (!_pvLibRemoteProcessorHandle) {
// Return error
const char* pcError = dlerror();
@@ -2471,7 +2511,7 @@ bool CParameterMgr::handleRemoteProcessingInterface(string& strError)
return false;
}
- CreateRemoteProcessorServer pfnCreateRemoteProcessorServer = (CreateRemoteProcessorServer)dlsym(_handleLibRemoteProcessor, "createRemoteProcessorServer");
+ CreateRemoteProcessorServer pfnCreateRemoteProcessorServer = (CreateRemoteProcessorServer)dlsym(_pvLibRemoteProcessorHandle, "createRemoteProcessorServer");
if (!pfnCreateRemoteProcessorServer) {
@@ -2574,28 +2614,27 @@ void CParameterMgr::doApplyConfigurations(bool bForce)
getSelectionCriteria()->resetModifiedStatus();
}
-bool CParameterMgr::getSystemClassXMLString(string& strResult)
+// Export to XML string
+bool CParameterMgr::exportElementToXMLString(const IXmlSource* pXmlSource,
+ const string& strRootElementType,
+ string& strResult) const
{
- // Root element
- const CSystemClass* pSystemClass = getSystemClass();
-
string strError;
CXmlSerializingContext xmlSerializingContext(strError);
// Use a doc source by loading data from instantiated Configurable Domains
- CXmlMemoryDocSource memorySource(pSystemClass, pSystemClass->getKind(),
- _bValidateSchemasOnStart);
+ CXmlMemoryDocSource memorySource(pXmlSource, strRootElementType, false);
// Use a doc sink that write the doc data in a string
CXmlStringDocSink stringSink(strResult);
+ // Do the export
bool bProcessSuccess = stringSink.process(memorySource, xmlSerializingContext);
if (!bProcessSuccess) {
strResult = strError;
-
}
return bProcessSuccess;
diff --git a/parameter/ParameterMgr.h b/parameter/ParameterMgr.h
index c6a2fd5..6a3ecb8 100644
--- a/parameter/ParameterMgr.h
+++ b/parameter/ParameterMgr.h
@@ -88,7 +88,7 @@ class CParameterMgr : private CElement
};
// Version
static const uint32_t guiEditionMajor = 0x2;
- static const uint32_t guiEditionMinor = 0x3;
+ static const uint32_t guiEditionMinor = 0x4;
static const uint32_t guiRevision = 0x0;
// Parameter handle friendship
@@ -340,14 +340,17 @@ public:
bool exportDomainsBinary(const std::string& strFileName, std::string& strError);
/**
- * Method that creates an Xml description of the instanciated parameter structure contained
- * in SystemClass.
+ * Method that exports an Xml description of the passed element into a string
*
- * @param[out] strResult contains the xml description of SystemClass or the errors if any
+ * @param[in] pXmlSource The source element to export
+ * @param[in] strRootElementType The XML root element name of the exported instance document
+ * @param[out] strResult contains the xml description or the error description in case false is returned
*
- * @return false if any error occures during the creation of the xml description
+ * @return true for success, false if any error occurs during the creation of the xml description (validation or encoding)
*/
- bool getSystemClassXMLString(std::string& strResult);
+ bool exportElementToXMLString(const IXmlSource* pXmlSource,
+ const std::string& strRootElementType,
+ std::string& strResult) const;
// CElement
virtual std::string getKind() const;
@@ -597,8 +600,10 @@ private:
// Subsystem plugin location
const CSubsystemPlugins* _pSubsystemPlugins;
- // Remote processor library handle
- void *_handleLibRemoteProcessor;
+ /**
+ * Remote processor library handle
+ */
+ void* _pvLibRemoteProcessorHandle;
// Whole system structure checksum
uint8_t _uiStructureChecksum;
diff --git a/parameter/ParameterMgrFullConnector.cpp b/parameter/ParameterMgrFullConnector.cpp
index b03facc..30f31e9 100644
--- a/parameter/ParameterMgrFullConnector.cpp
+++ b/parameter/ParameterMgrFullConnector.cpp
@@ -363,8 +363,3 @@ bool CParameterMgrFullConnector::exportSingleDomainXml(string& strXmlDest,
return _pParameterMgr->exportSingleDomainXml(strXmlDest, strDomainName, bWithSettings, bToFile,
strError);
}
-
-bool CParameterMgrFullConnector::getSystemClassXMLString(string& strResult)
-{
- return _pParameterMgr->getSystemClassXMLString(strResult);
-}
diff --git a/parameter/ParameterMgrPlatformConnector.cpp b/parameter/ParameterMgrPlatformConnector.cpp
index f29c8a8..d49003d 100644
--- a/parameter/ParameterMgrPlatformConnector.cpp
+++ b/parameter/ParameterMgrPlatformConnector.cpp
@@ -175,12 +175,6 @@ bool CParameterMgrPlatformConnector::start(string& strError)
return false;
}
- // Init flow
- if (!_pParameterMgr->init(strError)) {
-
- return false;
- }
-
_bStarted = true;
return true;
diff --git a/parameter/ParameterType.cpp b/parameter/ParameterType.cpp
index 01d94aa..01d94aa 100755..100644
--- a/parameter/ParameterType.cpp
+++ b/parameter/ParameterType.cpp
diff --git a/parameter/ParameterType.h b/parameter/ParameterType.h
index 7d7caf7..7d7caf7 100755..100644
--- a/parameter/ParameterType.h
+++ b/parameter/ParameterType.h
diff --git a/parameter/SelectionCriterion.cpp b/parameter/SelectionCriterion.cpp
index f49137b..7818924 100644
--- a/parameter/SelectionCriterion.cpp
+++ b/parameter/SelectionCriterion.cpp
@@ -27,6 +27,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+
#include "SelectionCriterion.h"
#include "AutoLog.h"
@@ -168,3 +169,15 @@ std::string CSelectionCriterion::getFormattedDescription(bool bWithTypeInfo, boo
}
return strFormattedDescription;
}
+
+// XML export
+void CSelectionCriterion::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const
+{
+ // Current Value
+ xmlElement.setAttributeString("Value", _pType->getFormattedState(_iState));
+
+ // Serialize Type node
+ _pType->toXml(xmlElement, serializingContext);
+
+ base::toXml(xmlElement, serializingContext);
+}
diff --git a/parameter/SelectionCriterion.h b/parameter/SelectionCriterion.h
index c61d7d0..cf99035 100644
--- a/parameter/SelectionCriterion.h
+++ b/parameter/SelectionCriterion.h
@@ -63,6 +63,15 @@ public:
/// From CElement
virtual std::string getKind() const;
+
+ /**
+ * Export to XML
+ *
+ * @param[in] xmlElement The XML element to export to
+ * @param[in] serializingContext The serializing context
+ *
+ */
+ virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const;
private:
// Current state
int _iState;
diff --git a/parameter/SelectionCriterionType.cpp b/parameter/SelectionCriterionType.cpp
index 3e9cc80..95e8e46 100644
--- a/parameter/SelectionCriterionType.cpp
+++ b/parameter/SelectionCriterionType.cpp
@@ -203,3 +203,26 @@ std::string CSelectionCriterionType::getFormattedState(int iValue) const
return strFormattedState;
}
+
+// From IXmlSource
+void CSelectionCriterionType::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const
+{
+ // Type Kind
+ xmlElement.setAttributeString("Kind", isTypeInclusive() ? "Inclusive" : "Exclusive");
+
+ // Value pairs as children
+ NumToLitMapConstIt it;
+
+ for (it = _numToLitMap.begin(); it != _numToLitMap.end(); ++it) {
+
+ CXmlElement childValuePairElement;
+
+ xmlElement.createChild(childValuePairElement, "ValuePair");
+ // Literal
+ childValuePairElement.setAttributeString("Literal", it->first);
+ // Numerical
+ childValuePairElement.setAttributeSignedInteger("Numerical", it->second);
+ }
+
+ base::toXml(xmlElement, serializingContext);
+}
diff --git a/parameter/SelectionCriterionType.h b/parameter/SelectionCriterionType.h
index bfef21e..ef4176a 100644
--- a/parameter/SelectionCriterionType.h
+++ b/parameter/SelectionCriterionType.h
@@ -63,6 +63,15 @@ public:
// Formatted state
virtual std::string getFormattedState(int iValue) const;
+ /**
+ * Export to XML
+ *
+ * @param[in] xmlElement The XML element to export to
+ * @param[in] serializingContext The serializing context
+ *
+ */
+ virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const;
+
// From CElement
virtual std::string getKind() const;
private:
diff --git a/parameter/SubsystemObject.cpp b/parameter/SubsystemObject.cpp
index 76b9549..76b9549 100755..100644
--- a/parameter/SubsystemObject.cpp
+++ b/parameter/SubsystemObject.cpp
diff --git a/parameter/SubsystemObject.h b/parameter/SubsystemObject.h
index ab085bc..ab085bc 100755..100644
--- a/parameter/SubsystemObject.h
+++ b/parameter/SubsystemObject.h
diff --git a/parameter/SystemClass.cpp b/parameter/SystemClass.cpp
index effc573..334772a 100644
--- a/parameter/SystemClass.cpp
+++ b/parameter/SystemClass.cpp
@@ -71,11 +71,16 @@ CSystemClass::~CSystemClass()
{
delete _pSubsystemLibrary;
- // Close all previously opened libraries
- while (!_subsystemLibraries.empty())
- {
- dlclose(_subsystemLibraries.back());
- _subsystemLibraries.pop_back();
+ // Destroy child subsystems *before* unloading the libraries (otherwise crashes will occur
+ // as unmapped code will be referenced)
+ clean();
+
+ // Close all previously opened subsystem libraries
+ list<void*>::const_iterator it;
+
+ for (it = _subsystemLibraryHandleList.begin(); it != _subsystemLibraryHandleList.end(); ++it) {
+
+ dlclose(*it);
}
}
@@ -238,7 +243,7 @@ bool CSystemClass::loadPlugins(list<string>& lstrPluginFiles, list<string>& lstr
}
// Store libraries handles
- _subsystemLibraries.push_back(lib_handle);
+ _subsystemLibraryHandleList.push_back(lib_handle);
// Get plugin symbol
string strPluginSymbol = getPluginSymbol(strPluginFileName);
@@ -309,12 +314,3 @@ bool CSystemClass::init(string& strError)
{
return base::init(strError);
}
-
-// From IXmlSource
-void CSystemClass::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const
-{
- // Set the name of system class
- xmlElement.setNameAttribute(getName());
-
- base::toXml(xmlElement, serializingContext);
-}
diff --git a/parameter/SystemClass.h b/parameter/SystemClass.h
index 3ffbf25..a224609 100644
--- a/parameter/SystemClass.h
+++ b/parameter/SystemClass.h
@@ -75,9 +75,6 @@ public:
virtual bool init(std::string& strError);
virtual std::string getKind() const;
- // From IXmlSource
- virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const;
-
private:
CSystemClass(const CSystemClass&);
CSystemClass& operator=(const CSystemClass&);
@@ -111,6 +108,6 @@ private:
// Subsystem factory
CSubsystemLibrary* _pSubsystemLibrary;
- std::list<void*> _subsystemLibraries; /**< Contains the list of all open plugin libs. */
+ std::list<void*> _subsystemLibraryHandleList; /**< Contains the list of all open plugin libs. */
};
diff --git a/parameter/TypeElement.cpp b/parameter/TypeElement.cpp
index 7e58c75..7e58c75 100755..100644
--- a/parameter/TypeElement.cpp
+++ b/parameter/TypeElement.cpp
diff --git a/parameter/TypeElement.h b/parameter/TypeElement.h
index 8f474c0..8f474c0 100755..100644
--- a/parameter/TypeElement.h
+++ b/parameter/TypeElement.h
diff --git a/parameter/include/ParameterMgrFullConnector.h b/parameter/include/ParameterMgrFullConnector.h
index 8ef7bb7..31022a6 100644
--- a/parameter/include/ParameterMgrFullConnector.h
+++ b/parameter/include/ParameterMgrFullConnector.h
@@ -259,16 +259,6 @@ public:
bool exportSingleDomainXml(std::string& strXmlDest, const std::string& strDomainName, bool bWithSettings,
bool bToFile, std::string& strError) const;
- /**
- * Method that creates an Xml description of the instanciated parameter structure contained
- * in SystemClass.
- *
- * @param[out] strResult contains the xml description of SystemClass or the errors if any
- *
- * @return false if any error occures during the creation of the xml description
- */
- bool getSystemClassXMLString(std::string& strResult);
-
private:
// disallow copying because this class manages raw pointers' lifecycle
CParameterMgrFullConnector(const CParameterMgrFullConnector&);
diff --git a/remote-process/main.cpp b/remote-process/main.cpp
index bcf825b..97881dc 100644
--- a/remote-process/main.cpp
+++ b/remote-process/main.cpp
@@ -157,9 +157,6 @@ int main(int argc, char *argv[])
// Connect to target
CConnectionSocket connectionSocket;
- // Set timeout
- connectionSocket.setTimeout(5000);
-
string strError;
// Connect
if (!connectionSocket.connect(argv[1], uiPort, strError)) {
diff --git a/remote-processor/RemoteProcessorServer.cpp b/remote-processor/RemoteProcessorServer.cpp
index dff935b..c1d87e5 100644
--- a/remote-processor/RemoteProcessorServer.cpp
+++ b/remote-processor/RemoteProcessorServer.cpp
@@ -157,9 +157,6 @@ void CRemoteProcessorServer::handleNewConnection()
return;
}
- // Set timeout
- clientSocket->setTimeout(5000);
-
// Process all incoming requests from the client
while (true) {
diff --git a/test/test-platform/TestPlatform.cpp b/test/test-platform/TestPlatform.cpp
index b2b895c..a6613e9 100644
--- a/test/test-platform/TestPlatform.cpp
+++ b/test/test-platform/TestPlatform.cpp
@@ -47,7 +47,8 @@ class CParameterMgrPlatformConnectorLogger : public CParameterMgrPlatformConnect
public:
CParameterMgrPlatformConnectorLogger() {}
- virtual void log(bool bIsWarning, const string& strLog) {
+ virtual void log(bool bIsWarning, const string& strLog)
+ {
if (bIsWarning) {
@@ -71,24 +72,24 @@ CTestPlatform::CTestPlatform(const string& strClass, int iPortNumber, sem_t& exi
_pCommandHandler->addCommandParser("exit", &CTestPlatform::exit,
0, "", "Exit TestPlatform");
_pCommandHandler->addCommandParser(
- "createExclusiveSelectionCriterionFromStateList",
- &CTestPlatform::createExclusiveSelectionCriterionFromStateList,
- 2, "<name> <stateList>",
- "Create inclusive selection criterion from state name list");
+ "createExclusiveSelectionCriterionFromStateList",
+ &CTestPlatform::createExclusiveSelectionCriterionFromStateList,
+ 2, "<name> <stateList>",
+ "Create inclusive selection criterion from state name list");
_pCommandHandler->addCommandParser(
- "createInclusiveSelectionCriterionFromStateList",
- &CTestPlatform::createInclusiveSelectionCriterionFromStateList,
- 2, "<name> <stateList>",
- "Create exclusive selection criterion from state name list");
+ "createInclusiveSelectionCriterionFromStateList",
+ &CTestPlatform::createInclusiveSelectionCriterionFromStateList,
+ 2, "<name> <stateList>",
+ "Create exclusive selection criterion from state name list");
_pCommandHandler->addCommandParser(
- "createExclusiveSelectionCriterion",
- &CTestPlatform::createExclusiveSelectionCriterion,
- 2, "<name> <nbStates>", "Create inclusive selection criterion");
+ "createExclusiveSelectionCriterion",
+ &CTestPlatform::createExclusiveSelectionCriterion,
+ 2, "<name> <nbStates>", "Create inclusive selection criterion");
_pCommandHandler->addCommandParser(
- "createInclusiveSelectionCriterion",
- &CTestPlatform::createInclusiveSelectionCriterion,
- 2, "<name> <nbStates>", "Create exclusive selection criterion");
+ "createInclusiveSelectionCriterion",
+ &CTestPlatform::createInclusiveSelectionCriterion,
+ 2, "<name> <nbStates>", "Create exclusive selection criterion");
_pCommandHandler->addCommandParser("start", &CTestPlatform::startParameterMgr,
0, "", "Start ParameterMgr");
@@ -97,42 +98,42 @@ CTestPlatform::CTestPlatform(const string& strClass, int iPortNumber, sem_t& exi
2, "<name> <state>",
"Set the current state of a selection criterion");
_pCommandHandler->addCommandParser(
- "applyConfigurations",
- &CTestPlatform::applyConfigurations,
- 0, "", "Apply configurations selected by current selection criteria states");
+ "applyConfigurations",
+ &CTestPlatform::applyConfigurations,
+ 0, "", "Apply configurations selected by current selection criteria states");
_pCommandHandler->addCommandParser(
- "setFailureOnMissingSubsystem",
- &CTestPlatform::setter<&CParameterMgrPlatformConnector::setFailureOnMissingSubsystem>,
- 1, "true|false", "Set policy for missing subsystems, "
- "either abort start or fallback on virtual subsystem.");
+ "setFailureOnMissingSubsystem",
+ &CTestPlatform::setter<& CParameterMgrPlatformConnector::setFailureOnMissingSubsystem>,
+ 1, "true|false", "Set policy for missing subsystems, "
+ "either abort start or fallback on virtual subsystem.");
_pCommandHandler->addCommandParser(
- "getMissingSubsystemPolicy",
- &CTestPlatform::getter<&CParameterMgrPlatformConnector::getFailureOnMissingSubsystem>,
- 0, "", "Get policy for missing subsystems, "
- "either abort start or fallback on virtual subsystem.");
+ "getMissingSubsystemPolicy",
+ &CTestPlatform::getter<& CParameterMgrPlatformConnector::getFailureOnMissingSubsystem>,
+ 0, "", "Get policy for missing subsystems, "
+ "either abort start or fallback on virtual subsystem.");
_pCommandHandler->addCommandParser(
- "setFailureOnFailedSettingsLoad",
- &CTestPlatform::setter<&CParameterMgrPlatformConnector::setFailureOnFailedSettingsLoad>,
- 1, "true|false",
- "Set policy for failed settings load, either abort start or continue without domains.");
+ "setFailureOnFailedSettingsLoad",
+ &CTestPlatform::setter<& CParameterMgrPlatformConnector::setFailureOnFailedSettingsLoad>,
+ 1, "true|false",
+ "Set policy for failed settings load, either abort start or continue without domains.");
_pCommandHandler->addCommandParser(
- "getFailedSettingsLoadPolicy",
- &CTestPlatform::getter<&CParameterMgrPlatformConnector::getFailureOnFailedSettingsLoad>,
- 0, "",
- "Get policy for failed settings load, either abort start or continue without domains.");
+ "getFailedSettingsLoadPolicy",
+ &CTestPlatform::getter<& CParameterMgrPlatformConnector::getFailureOnFailedSettingsLoad>,
+ 0, "",
+ "Get policy for failed settings load, either abort start or continue without domains.");
_pCommandHandler->addCommandParser(
- "setValidateSchemasOnStart",
- &CTestPlatform::setter<&CParameterMgrPlatformConnector::setValidateSchemasOnStart>,
- 1, "true|false",
- "Set policy for schema validation based on .xsd files (false by default).");
+ "setValidateSchemasOnStart",
+ &CTestPlatform::setter<& CParameterMgrPlatformConnector::setValidateSchemasOnStart>,
+ 1, "true|false",
+ "Set policy for schema validation based on .xsd files (false by default).");
_pCommandHandler->addCommandParser(
- "getValidateSchemasOnStart",
- &CTestPlatform::getter<&CParameterMgrPlatformConnector::getValidateSchemasOnStart>,
- 0, "",
- "Get policy for schema validation based on .xsd files.");
+ "getValidateSchemasOnStart",
+ &CTestPlatform::getter<& CParameterMgrPlatformConnector::getValidateSchemasOnStart>,
+ 0, "",
+ "Get policy for schema validation based on .xsd files.");
// Create server
_pRemoteProcessorServer = new CRemoteProcessorServer(iPortNumber, _pCommandHandler);
@@ -149,7 +150,7 @@ CTestPlatform::~CTestPlatform()
}
CTestPlatform::CommandReturn CTestPlatform::exit(
- const IRemoteCommand& remoteCommand, string& strResult)
+ const IRemoteCommand& remoteCommand, string& strResult)
{
(void)remoteCommand;
@@ -180,53 +181,53 @@ bool CTestPlatform::load(std::string& strError)
//////////////// Remote command parsers
/// Selection Criterion
CTestPlatform::CommandReturn CTestPlatform::createExclusiveSelectionCriterionFromStateList(
- const IRemoteCommand& remoteCommand, string& strResult)
+ const IRemoteCommand& remoteCommand, string& strResult)
{
return createExclusiveSelectionCriterionFromStateList(
- remoteCommand.getArgument(0), remoteCommand, strResult) ?
- CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed;
+ remoteCommand.getArgument(0), remoteCommand, strResult) ?
+ CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed;
}
CTestPlatform::CommandReturn CTestPlatform::createInclusiveSelectionCriterionFromStateList(
- const IRemoteCommand& remoteCommand, string& strResult)
+ const IRemoteCommand& remoteCommand, string& strResult)
{
return createInclusiveSelectionCriterionFromStateList(
- remoteCommand.getArgument(0), remoteCommand, strResult) ?
- CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed;
+ remoteCommand.getArgument(0), remoteCommand, strResult) ?
+ CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed;
}
CTestPlatform::CommandReturn CTestPlatform::createExclusiveSelectionCriterion(
- const IRemoteCommand& remoteCommand, string& strResult)
+ const IRemoteCommand& remoteCommand, string& strResult)
{
return createExclusiveSelectionCriterion(
- remoteCommand.getArgument(0),
- strtoul(remoteCommand.getArgument(1).c_str(), NULL, 0),
- strResult) ?
- CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed;
+ remoteCommand.getArgument(0),
+ strtoul(remoteCommand.getArgument(1).c_str(), NULL, 0),
+ strResult) ?
+ CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed;
}
CTestPlatform::CommandReturn CTestPlatform::createInclusiveSelectionCriterion(
- const IRemoteCommand& remoteCommand, string& strResult)
+ const IRemoteCommand& remoteCommand, string& strResult)
{
return createInclusiveSelectionCriterion(
- remoteCommand.getArgument(0),
- strtoul(remoteCommand.getArgument(1).c_str(), NULL, 0),
- strResult) ?
- CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed;
+ remoteCommand.getArgument(0),
+ strtoul(remoteCommand.getArgument(1).c_str(), NULL, 0),
+ strResult) ?
+ CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed;
}
CTestPlatform::CommandReturn CTestPlatform::startParameterMgr(
- const IRemoteCommand& remoteCommand, string& strResult)
+ const IRemoteCommand& remoteCommand, string& strResult)
{
(void)remoteCommand;
return _pParameterMgrPlatformConnector->start(strResult) ?
- CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed;
+ CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed;
}
-template<CTestPlatform::setter_t setFunction>
+template <CTestPlatform::setter_t setFunction>
CTestPlatform::CommandReturn CTestPlatform::setter(
- const IRemoteCommand& remoteCommand, string& strResult)
+ const IRemoteCommand& remoteCommand, string& strResult)
{
const string& strAbort = remoteCommand.getArgument(0);
@@ -237,49 +238,51 @@ CTestPlatform::CommandReturn CTestPlatform::setter(
}
return (_pParameterMgrPlatformConnector->*setFunction)(bFail, strResult) ?
- CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed;
+ CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed;
}
-template<CTestPlatform::getter_t getFunction>
+template <CTestPlatform::getter_t getFunction>
CTestPlatform::CommandReturn CTestPlatform::getter(
- const IRemoteCommand& remoteCommand, string& strResult)
+ const IRemoteCommand& remoteCommand, string& strResult)
{
(void)remoteCommand;
strResult = (_pParameterMgrPlatformConnector->*getFunction)() ? "true" : "false";
- return CTestPlatform::CCommandHandler::ESucceeded;
+ return CTestPlatform::CCommandHandler::ESucceeded;
}
CTestPlatform::CommandReturn CTestPlatform::setCriterionState(
- const IRemoteCommand& remoteCommand, string& strResult)
+ const IRemoteCommand& remoteCommand, string& strResult)
{
bool bSuccess;
- const char * pcState = remoteCommand.getArgument(1).c_str();
+ const char* pcState = remoteCommand.getArgument(1).c_str();
- char *pcStrEnd;
+ char* pcStrEnd;
// Reset errno to check if it is updated during the conversion (strtol/strtoul)
errno = 0;
- uint32_t state = strtoul(pcState , &pcStrEnd, 0);
+ uint32_t state = strtoul(pcState, &pcStrEnd, 0);
if (!errno && (*pcStrEnd == '\0')) {
// Sucessfull conversion, set criterion state by numerical state
- bSuccess = setCriterionState(remoteCommand.getArgument(0), state , strResult ) ;
+ bSuccess = setCriterionState(remoteCommand.getArgument(0), state, strResult);
} else {
// Conversion failed, set criterion state by lexical state
- bSuccess = setCriterionStateByLexicalSpace(remoteCommand , strResult );
+ bSuccess = setCriterionStateByLexicalSpace(remoteCommand, strResult);
}
- return bSuccess ? CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed;
+ return bSuccess ? CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::
+ EFailed;
}
-CTestPlatform::CommandReturn CTestPlatform::applyConfigurations(const IRemoteCommand& remoteCommand, string& strResult)
+CTestPlatform::CommandReturn CTestPlatform::applyConfigurations(const IRemoteCommand& remoteCommand,
+ string& strResult)
{
(void)remoteCommand;
(void)strResult;
@@ -291,16 +294,20 @@ CTestPlatform::CommandReturn CTestPlatform::applyConfigurations(const IRemoteCom
//////////////// Remote command handlers
-bool CTestPlatform::createExclusiveSelectionCriterionFromStateList(const string& strName, const IRemoteCommand& remoteCommand, string& strResult)
+bool CTestPlatform::createExclusiveSelectionCriterionFromStateList(
+ const string& strName,
+ const IRemoteCommand& remoteCommand,
+ string& strResult)
{
- assert (_pParameterMgrPlatformConnector != NULL);
+ assert(_pParameterMgrPlatformConnector != NULL);
- ISelectionCriterionTypeInterface* pCriterionType = _pParameterMgrPlatformConnector->createSelectionCriterionType(false);
+ ISelectionCriterionTypeInterface* pCriterionType =
+ _pParameterMgrPlatformConnector->createSelectionCriterionType(false);
assert(pCriterionType != NULL);
- uint32_t uiNbStates = remoteCommand.getArgumentCount() - 1 ;
+ uint32_t uiNbStates = remoteCommand.getArgumentCount() - 1;
uint32_t uiState;
for (uiState = 0; uiState < uiNbStates; uiState++) {
@@ -320,15 +327,19 @@ bool CTestPlatform::createExclusiveSelectionCriterionFromStateList(const string&
return true;
}
-bool CTestPlatform::createInclusiveSelectionCriterionFromStateList(const string& strName, const IRemoteCommand& remoteCommand, string& strResult)
+bool CTestPlatform::createInclusiveSelectionCriterionFromStateList(
+ const string& strName,
+ const IRemoteCommand& remoteCommand,
+ string& strResult)
{
- assert (_pParameterMgrPlatformConnector != NULL);
+ assert(_pParameterMgrPlatformConnector != NULL);
- ISelectionCriterionTypeInterface* pCriterionType = _pParameterMgrPlatformConnector->createSelectionCriterionType(true);
+ ISelectionCriterionTypeInterface* pCriterionType =
+ _pParameterMgrPlatformConnector->createSelectionCriterionType(true);
assert(pCriterionType != NULL);
- uint32_t uiNbStates = remoteCommand.getArgumentCount() - 1 ;
+ uint32_t uiNbStates = remoteCommand.getArgumentCount() - 1;
if (uiNbStates > 32) {
@@ -357,9 +368,12 @@ bool CTestPlatform::createInclusiveSelectionCriterionFromStateList(const string&
}
-bool CTestPlatform::createExclusiveSelectionCriterion(const string& strName, uint32_t uiNbStates, string& strResult)
+bool CTestPlatform::createExclusiveSelectionCriterion(const string& strName,
+ uint32_t uiNbStates,
+ string& strResult)
{
- ISelectionCriterionTypeInterface* pCriterionType = _pParameterMgrPlatformConnector->createSelectionCriterionType(false);
+ ISelectionCriterionTypeInterface* pCriterionType =
+ _pParameterMgrPlatformConnector->createSelectionCriterionType(false);
uint32_t uistate;
@@ -383,9 +397,12 @@ bool CTestPlatform::createExclusiveSelectionCriterion(const string& strName, uin
return true;
}
-bool CTestPlatform::createInclusiveSelectionCriterion(const string& strName, uint32_t uiNbStates, string& strResult)
+bool CTestPlatform::createInclusiveSelectionCriterion(const string& strName,
+ uint32_t uiNbStates,
+ string& strResult)
{
- ISelectionCriterionTypeInterface* pCriterionType = _pParameterMgrPlatformConnector->createSelectionCriterionType(true);
+ ISelectionCriterionTypeInterface* pCriterionType =
+ _pParameterMgrPlatformConnector->createSelectionCriterionType(true);
if (uiNbStates > 32) {
@@ -418,7 +435,8 @@ bool CTestPlatform::createInclusiveSelectionCriterion(const string& strName, uin
bool CTestPlatform::setCriterionState(const string& strName, uint32_t uiState, string& strResult)
{
- ISelectionCriterionInterface* pCriterion = _pParameterMgrPlatformConnector->getSelectionCriterion(strName);
+ ISelectionCriterionInterface* pCriterion =
+ _pParameterMgrPlatformConnector->getSelectionCriterion(strName);
if (!pCriterion) {
@@ -432,13 +450,15 @@ bool CTestPlatform::setCriterionState(const string& strName, uint32_t uiState, s
return true;
}
-bool CTestPlatform::setCriterionStateByLexicalSpace(const IRemoteCommand& remoteCommand, string& strResult)
+bool CTestPlatform::setCriterionStateByLexicalSpace(const IRemoteCommand& remoteCommand,
+ string& strResult)
{
// Get criterion name
std::string strCriterionName = remoteCommand.getArgument(0);
- ISelectionCriterionInterface* pCriterion = _pParameterMgrPlatformConnector->getSelectionCriterion(strCriterionName);
+ ISelectionCriterionInterface* pCriterion =
+ _pParameterMgrPlatformConnector->getSelectionCriterion(strCriterionName);
if (!pCriterion) {
@@ -462,30 +482,38 @@ bool CTestPlatform::setCriterionStateByLexicalSpace(const IRemoteCommand& remote
}
/// Translate lexical state to numerical state
- uint32_t uiNumericalState = 0;
+ int iNumericalState = 0;
uint32_t uiLexicalSubStateIndex;
// Parse lexical substates
- for (uiLexicalSubStateIndex = 1; uiLexicalSubStateIndex <= uiNbSubStates; uiLexicalSubStateIndex++) {
-
- int iNumericalSubState;
-
- const std::string& strLexicalSubState = remoteCommand.getArgument(uiLexicalSubStateIndex);
-
- // Translate lexical to numerical substate
- if (!pCriterionType->getNumericalValue(strLexicalSubState, iNumericalSubState)) {
+ std::string strLexicalState = "";
+
+ for (uiLexicalSubStateIndex = 1;
+ uiLexicalSubStateIndex <= uiNbSubStates;
+ uiLexicalSubStateIndex++) {
+ /*
+ * getNumericalValue method from ISelectionCriterionTypeInterface strip his parameter
+ * first parameter based on | sign. In case that the user uses multiple parameters
+ * to set InclusiveCriterion value, we aggregate all desired values to be sure
+ * they will be handled correctly.
+ */
+ if (uiLexicalSubStateIndex != 1) {
+ strLexicalState += "|";
+ }
+ strLexicalState += remoteCommand.getArgument(uiLexicalSubStateIndex);
+ }
- strResult = "Unable to find lexical state \"" + strLexicalSubState + "\" in criteria " + strCriterionName;
+ // Translate lexical to numerical substate
+ if (!pCriterionType->getNumericalValue(strLexicalState, iNumericalState)) {
- return false;
- }
+ strResult = "Unable to find lexical state \""
+ + strLexicalState + "\" in criteria " + strCriterionName;
- // Aggregate numerical substates
- uiNumericalState |= iNumericalSubState;
+ return false;
}
// Set criterion new state
- pCriterion->setCriterionState(uiNumericalState);
+ pCriterion->setCriterionState(iNumericalState);
return true;
}
diff --git a/tools/bash_completion/CMakeLists.txt b/tools/bash_completion/CMakeLists.txt
new file mode 100644
index 0000000..9e66d57
--- /dev/null
+++ b/tools/bash_completion/CMakeLists.txt
@@ -0,0 +1,30 @@
+# Copyright (c) 2014, Intel Corporation
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation and/or
+# other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its contributors
+# may be used to endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+INSTALL(FILES remote-process
+ DESTINATION etc/bash_completion.d/)
diff --git a/tools/bash_completion/remote-process b/tools/bash_completion/remote-process
new file mode 100644
index 0000000..c1b55bf
--- /dev/null
+++ b/tools/bash_completion/remote-process
@@ -0,0 +1,131 @@
+# Copyright (c) 2014, Intel Corporation
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation and/or
+# other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its contributors
+# may be used to endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# bash completion for remote-process
+#
+# Execute this file in bash with the built-in command "source",
+# it will add autocompletion to remote-process.
+#
+# To permanently add this autocompletion, add "source this_file"
+# in your .bashrc or copy this file in /etc/bash_completion.d/
+
+function _remote-process ()
+{
+ # Get current word
+ local cur prev words cword;
+ _init_completion || return;
+
+ local options=""
+ if [ $cword -eq 1 ]
+ then # Completing the hostname
+ _known_hosts_real "$cur"; return
+ elif [ $cword -eq 2 ] # Completing tcp port
+ then
+ options='5000 5001 5008 5009 5019';
+ else
+ _remoteProcessWrapper () {
+ "${words[0]}" "${words[1]}" "${words[2]}" "$@" |sed 's#\r##;/^$/d'
+ }
+
+ # Get usage
+ local _parameterHelp=$(_remoteProcessWrapper help)
+
+ if [ $cword -eq 3 ]
+ then # Completing command
+ options=$(echo "$_parameterHelp" | awk '{print $1}')
+ else # Completing command argument
+ local command=${words[3]}
+
+ # Get current command argument types
+ # - keep in the help text only the line describing current command
+ # - delete => and posterior
+ # - replace space in balisa (<...>) by underscore then delete [<>]
+ local argumentTypes=$( echo "$_parameterHelp" | grep "$command" |\
+ sed -e 's# *=>.*##' -e 's#^[^ ]* *##' \
+ -e 's/> />#/g' -e 's# #_#g' -e 's/>#/> /g' -e 's#[<>]##g' )
+
+ local currentArgumentType=$(echo $argumentTypes |
+ awk '{print $('$cword'-3)}')
+
+ # Take care of argument list type if it is the last argument
+ # Ex : setElementSequence <domain> <configuration> <elem path list>
+ if [ "$currentArgumentType" = "" ] &&
+ expr "$argumentTypes" : '.*list' > /dev/null ;
+ then
+ # Set last argument type specified as the current type
+ currentArgumentType=$(echo "$argumentTypes" | awk '{print $NF}')
+ fi
+
+
+ case "${currentArgumentType}" in
+ elem_path*|param_path* )
+ local incompletPath=$(echo "${cur}" | sed 's#[^/]*$##')
+
+ local parameterCommand
+ if [ "$currentArgumentType" = elem_path_list ];
+ then
+ # <elem path list> is the parameter path list
+ # of the domain specified by the second argument
+ parameterCommand="listDomainElements ${words[4]}"
+ else
+ # Otherwise suggest all parameter paths
+ parameterCommand="listParameters"
+ fi
+ # Get paths and delete everything after the first "/"
+ # following the current input (see complete -o filenames)
+ local options=$(_remoteProcessWrapper $parameterCommand ${incompletPath:-/} |
+ sed -re "s#(/?${incompletPath}[^/ ]*/?).*#\1#")
+ compopt -o filenames
+
+ # If some options are folders, do not append a space
+ test "$(echo "$options" | sed '/[^/]$/d')" && compopt -o nospace
+ ;;
+ domain)
+ # Get all domain names
+ options=$(_remoteProcessWrapper listDomains | awk '{print $1}')
+ ;;
+ configuration)
+ # Get all configurations of the domain specified by
+ # the second argument.
+ # TODO: find the domain position using $argumentTypes
+ options=$(_remoteProcessWrapper listConfigurations "${words[4]}")
+ ;;
+ *\|*)
+ # Possible arguments are separated by "|". Ex : on|off
+ options=$(echo $currentArgumentType | sed -e 's#|# #g' -e 's#\*##g')
+ ;;
+ file_path)
+ _filedir;
+ ;;
+ esac
+ fi
+ fi
+ COMPREPLY+=( $(compgen -W "$options" -- "$cur") )
+
+ unset _remoteProcessWrapper
+} && complete -F _remote-process remote-process
diff --git a/tools/xmlGenerator/hostDomainGenerator.sh b/tools/xmlGenerator/hostDomainGenerator.sh
index 4222382..1a7d315 100755
--- a/tools/xmlGenerator/hostDomainGenerator.sh
+++ b/tools/xmlGenerator/hostDomainGenerator.sh
@@ -245,7 +245,7 @@ changeSocketsPorts() {
# Start the pfw using different socket if it fails
safeStartPFW () {
local retry=0
- local nbRetry=10
+ local nbRetry=1000 # Workaround to avoid build failure, it very very rarely fail this many time
# Choose a new pair of socket ports
changeSocketsPorts
diff --git a/xmlserializer/XmlElement.cpp b/xmlserializer/XmlElement.cpp
index 106bfdc..d45f360 100644
--- a/xmlserializer/XmlElement.cpp
+++ b/xmlserializer/XmlElement.cpp
@@ -221,6 +221,13 @@ void CXmlElement::setAttributeInteger(const string& strAttributeName, uint32_t u
setAttributeString(strAttributeName, strStream.str());
}
+void CXmlElement::setAttributeSignedInteger(const string& strAttributeName, int32_t iValue)
+{
+ ostringstream strStream;
+ strStream << iValue;
+ setAttributeString(strAttributeName, strStream.str());
+}
+
void CXmlElement::setNameAttribute(const string& strValue)
{
setAttributeString("Name", strValue);
diff --git a/xmlserializer/XmlElement.h b/xmlserializer/XmlElement.h
index 9c5ca0e..7c1d518 100644
--- a/xmlserializer/XmlElement.h
+++ b/xmlserializer/XmlElement.h
@@ -71,6 +71,14 @@ public:
void setTextContent(const std::string& strContent);
void setComment(const std::string& strComment);
void setAttributeInteger(const std::string& strAttributeName, uint32_t uiValue);
+ /**
+ * Set attribute with signed integer
+ *
+ * @param[in] strAttributeName The attribute name
+ * @param[in] iValue The attribute value
+ *
+ */
+ void setAttributeSignedInteger(const std::string& strAttributeName, int32_t iValue);
// Child creation
void createChild(CXmlElement& childElement, const std::string& strType);
diff --git a/xmlserializer/XmlStringDocSink.cpp b/xmlserializer/XmlStringDocSink.cpp
index 4b05d85..caec545 100644
--- a/xmlserializer/XmlStringDocSink.cpp
+++ b/xmlserializer/XmlStringDocSink.cpp
@@ -27,7 +27,6 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
#include "XmlStringDocSink.h"
#include <libxml/parser.h>
@@ -50,6 +49,8 @@ bool CXmlStringDocSink::doProcess(CXmlDocSource& xmlDocSource,
if (!pcDumpedDoc) {
+ serializingContext.setError("Unable to encode XML document in memory");
+
return false;
}