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

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Apr 13 23:51:21 CEST 2021


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.

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 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



More information about the libcamera-devel mailing list