[RFC PATCH v3 2/9] libcamera: process: Misc. cleanup around `execv()`
Barnabás Pőcze
barnabas.pocze at ideasonboard.com
Tue Mar 25 19:08:14 CET 2025
Firstly, get the number of arguments first, and use that to determine the
size of the allocation instead of retrieving it twice.
Secondly, use `const_cast` instead of a C-style cast when calling `execv()`.
Third, use `size_t` to match the type of `args.size()`.
Signed-off-by: Barnabás Pőcze <barnabas.pocze at ideasonboard.com>
---
src/libcamera/process.cpp | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/src/libcamera/process.cpp b/src/libcamera/process.cpp
index 68fad3270..567b878d4 100644
--- a/src/libcamera/process.cpp
+++ b/src/libcamera/process.cpp
@@ -265,14 +265,15 @@ int Process::start(const std::string &path,
if (file && strcmp(file, "syslog"))
unsetenv("LIBCAMERA_LOG_FILE");
- const char **argv = new const char *[args.size() + 2];
- unsigned int len = args.size();
+ size_t len = args.size();
+ auto argv = std::make_unique<const char *[]>(len + 2);
+
argv[0] = path.c_str();
- for (unsigned int i = 0; i < len; i++)
+ for (size_t i = 0; i < len; i++)
argv[i + 1] = args[i].c_str();
argv[len + 1] = nullptr;
- execv(path.c_str(), (char **)argv);
+ execv(path.c_str(), const_cast<char **>(argv.get()));
exit(EXIT_FAILURE);
}
--
2.49.0
More information about the libcamera-devel
mailing list