[libcamera-devel] [PATCH 2/2] libcamera: log: Use compiler builtins to retrieve file and line number

Sebastian Fricke sebastian.fricke at posteo.net
Wed Apr 14 05:51:19 CEST 2021


Hey Laurent,

Thank you for the patch.

On 14.04.2021 00:51, Laurent Pinchart wrote:
>Replace the __FILE__ and __LINE__ values passed to the _log() function
>with default parameters, taking their values from the __builtin_FILE()
>and __builtin_LINE() functions. This moves handling of the file and line
>from the preprocessor to the compiler, which is generally preferred as
>it increases type safety.

Sounds good, I have tested the patch on my machine and I can confirm
that there is no visible change.

>
>Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Tested-by: Sebastian Fricke <sebastian.fricke at posteo.net>

>---
> include/libcamera/internal/log.h | 15 ++++++++-------
> src/libcamera/log.cpp            | 17 ++++++++---------
> 2 files changed, 16 insertions(+), 16 deletions(-)
>
>diff --git a/include/libcamera/internal/log.h b/include/libcamera/internal/log.h
>index 0fdacc4733fe..be0bab3c1272 100644
>--- a/include/libcamera/internal/log.h
>+++ b/include/libcamera/internal/log.h
>@@ -89,21 +89,22 @@ public:
> protected:
> 	virtual std::string logPrefix() const = 0;
>
>-	LogMessage _log(const char *file, unsigned int line,
>-			const LogCategory *category,
>-			LogSeverity severity) const;
>+	LogMessage _log(const LogCategory *category, LogSeverity severity,
>+			const char *fileName = __builtin_FILE(),
>+			unsigned int line = __builtin_LINE()) const;
> };
>
>-LogMessage _log(const char *file, unsigned int line,
>-		const LogCategory *category, LogSeverity severity);
>+LogMessage _log(const LogCategory *category, LogSeverity severity,
>+		const char *fileName = __builtin_FILE(),
>+		unsigned int line = __builtin_LINE());
>
> #ifndef __DOXYGEN__
> #define _LOG_CATEGORY(name) logCategory##name
>
> #define _LOG1(severity) \
>-	_log(__FILE__, __LINE__, nullptr, Log##severity).stream()
>+	_log(nullptr, Log##severity).stream()
> #define _LOG2(category, severity) \
>-	_log(__FILE__, __LINE__, &_LOG_CATEGORY(category)(), Log##severity).stream()
>+	_log(&_LOG_CATEGORY(category)(), Log##severity).stream()
>
> /*
>  * Expand the LOG() macro to _LOG1() or _LOG2() based on the number of
>diff --git a/src/libcamera/log.cpp b/src/libcamera/log.cpp
>index 9f86e645ac58..94175ab34535 100644
>--- a/src/libcamera/log.cpp
>+++ b/src/libcamera/log.cpp
>@@ -897,19 +897,18 @@ Loggable::~Loggable()
>
> /**
>  * \brief Create a temporary LogMessage object to log a message
>- * \param[in] fileName The file name where the message is logged from
>- * \param[in] line The line number where the message is logged from
>  * \param[in] category The log message category
>  * \param[in] severity The log message severity
>+ * \param[in] fileName The file name where the message is logged from
>+ * \param[in] line The line number where the message is logged from
>  *
>  * This method is used as a backeng by the LOG() macro to create a log message
>  * for locations inheriting from the Loggable class.
>  *
>  * \return A log message
>  */
>-LogMessage Loggable::_log(const char *fileName, unsigned int line,
>-			  const LogCategory *category,
>-			  LogSeverity severity) const
>+LogMessage Loggable::_log(const LogCategory *category, LogSeverity severity,
>+			  const char *fileName, unsigned int line) const
> {
> 	LogMessage msg(fileName, line,
> 		       category ? *category : LogCategory::defaultCategory(),
>@@ -921,18 +920,18 @@ LogMessage Loggable::_log(const char *fileName, unsigned int line,
>
> /**
>  * \brief Create a temporary LogMessage object to log a message
>- * \param[in] fileName The file name where the message is logged from
>- * \param[in] line The line number where the message is logged from
>  * \param[in] category The log message category
>  * \param[in] severity The log message severity
>+ * \param[in] fileName The file name where the message is logged from
>+ * \param[in] line The line number where the message is logged from
>  *
>  * This function is used as a backeng by the LOG() macro to create a log
>  * message for locations not inheriting from the Loggable class.
>  *
>  * \return A log message
>  */
>-LogMessage _log(const char *fileName, unsigned int line,
>-		const LogCategory *category, LogSeverity severity)
>+LogMessage _log(const LogCategory *category, LogSeverity severity,
>+		const char *fileName, unsigned int line)
> {
> 	return LogMessage(fileName, line,
> 			  category ? *category : LogCategory::defaultCategory(),
>-- 
>Regards,
>
>Laurent Pinchart
>
>_______________________________________________
>libcamera-devel mailing list
>libcamera-devel at lists.libcamera.org
>https://lists.libcamera.org/listinfo/libcamera-devel


More information about the libcamera-devel mailing list