[PATCH v3 2/8] libcamera: base: log: Use `std::from_chars()`

Barnabás Pőcze pobrn at protonmail.com
Mon Feb 17 19:54:45 CET 2025


Use the `std::from_chars()` function from `<charconv>` to
parse the integral log level instead of `strtoul` as it
provides an easier to use interface and better type safety.

Signed-off-by: Barnabás Pőcze <pobrn at protonmail.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
---
 src/libcamera/base/log.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/libcamera/base/log.cpp b/src/libcamera/base/log.cpp
index 8c72a005d..3dea1e178 100644
--- a/src/libcamera/base/log.cpp
+++ b/src/libcamera/base/log.cpp
@@ -8,6 +8,7 @@
 #include <libcamera/base/log.h>
 
 #include <array>
+#include <charconv>
 #include <fnmatch.h>
 #include <fstream>
 #include <iostream>
@@ -686,12 +687,11 @@ LogSeverity Logger::parseLogLevel(const std::string &level)
 		"FATAL",
 	};
 
-	int severity;
+	unsigned int severity;
 
 	if (std::isdigit(level[0])) {
-		char *endptr;
-		severity = strtoul(level.c_str(), &endptr, 10);
-		if (*endptr != '\0' || severity > LogFatal)
+		auto [end, ec] = std::from_chars(level.data(), level.data() + level.size(), severity);
+		if (ec != std::errc() || *end != '\0' || severity > LogFatal)
 			severity = LogInvalid;
 	} else {
 		severity = LogInvalid;
-- 
2.48.1




More information about the libcamera-devel mailing list