libcamera: process: Misc. cleanup around execv()
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@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
081554db34
commit
0a591eaf8c
1 changed files with 5 additions and 4 deletions
|
@ -279,14 +279,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();
|
||||
const 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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue