diff --git a/parameter/Element.cpp b/parameter/Element.cpp index 547c5914d..e401d4ec2 100644 --- a/parameter/Element.cpp +++ b/parameter/Element.cpp @@ -52,38 +52,18 @@ CElement::~CElement() // Logging void CElement::log_info(const char* strMessage, ...) const { - char *pacBuffer; va_list listPointer; - va_start(listPointer, strMessage); - - vasprintf(&pacBuffer, strMessage, listPointer); - + vLog(false, strMessage, listPointer); va_end(listPointer); - - if (pacBuffer != NULL) { - doLog(false, pacBuffer); - } - - free(pacBuffer); } void CElement::log_warning(const char* strMessage, ...) const { - char *pacBuffer; va_list listPointer; - va_start(listPointer, strMessage); - - vasprintf(&pacBuffer, strMessage, listPointer); - + vLog(true, strMessage, listPointer); va_end(listPointer); - - if (pacBuffer != NULL) { - doLog(true, pacBuffer); - } - - free(pacBuffer); } // Log each element of the string list @@ -99,6 +79,18 @@ void CElement::log_table(bool bIsWarning, const std::list lstrMessage) c } } +void CElement::vLog(bool bIsWarning, const char *strMessage, va_list args) const +{ + char *pacBuffer; + if(vasprintf(&pacBuffer, strMessage, args) == -1) { + return doLog(true, std::string() + "Unable to format " + + (bIsWarning ? "warning" : "info log") + + ": " + strMessage); + } + doLog(bIsWarning, pacBuffer); + free(pacBuffer); +} + void CElement::doLog(bool bIsWarning, const string& strLog) const { assert(_pParent); diff --git a/parameter/Element.h b/parameter/Element.h index 9bc6e876a..6f7ebba48 100644 --- a/parameter/Element.h +++ b/parameter/Element.h @@ -32,6 +32,7 @@ #include #include #include +#include #include #include "XmlSink.h" #include "XmlSource.h" @@ -52,6 +53,7 @@ class CElement : public IXmlSink, public IXmlSource void log_info(const char* strMessage, ...) const; void log_warning(const char* strMessage, ...) const; void log_table(bool bIsWarning, const std::list lstrMessage) const; + void vLog(bool bIsWarning, const char *strMessage, va_list args) const; // Description void setDescription(const std::string& strDescription); diff --git a/parameter/SubsystemObject.cpp b/parameter/SubsystemObject.cpp index e6b7b442d..644389e29 100644 --- a/parameter/SubsystemObject.cpp +++ b/parameter/SubsystemObject.cpp @@ -215,38 +215,18 @@ void CSubsystemObject::blackboardWrite(const void* pvData, uint32_t uiSize) // Logging void CSubsystemObject::log_info(std::string strMessage, ...) const { - char *pacBuffer; va_list listPointer; - va_start(listPointer, strMessage); - - vasprintf(&pacBuffer, strMessage.c_str(), listPointer); - + _pInstanceConfigurableElement->vLog(false, strMessage.c_str(), listPointer); va_end(listPointer); - - if (pacBuffer != NULL) { - _pInstanceConfigurableElement->log_info("%s", pacBuffer); - } - - free(pacBuffer); } void CSubsystemObject::log_warning(std::string strMessage, ...) const { - char *pacBuffer; va_list listPointer; - va_start(listPointer, strMessage); - - vasprintf(&pacBuffer, strMessage.c_str(), listPointer); - + _pInstanceConfigurableElement->vLog(true, strMessage.c_str(), listPointer); va_end(listPointer); - - if (pacBuffer != NULL) { - _pInstanceConfigurableElement->log_warning("%s", pacBuffer); - } - - free(pacBuffer); } // Configurable element retrieval