libcamera: base: log: Use std::from_chars()

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@protonmail.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
This commit is contained in:
Barnabás Pőcze 2025-01-21 13:16:20 +01:00
parent d40250e03b
commit 8fa119e0b5

View file

@ -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;