execv needs program name as first argument

This commit is contained in:
jeff 2020-08-20 14:39:23 +00:00 committed by Jeff Becker
parent 75f9643776
commit f5e4d8bd1b
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05
1 changed files with 8 additions and 9 deletions

View File

@ -277,29 +277,29 @@ Execute(std::string cmd)
{
std::cout << cmd << std::endl;
std::vector<std::string> parts_str;
std::vector<const char *> parts_raw;
std::vector<const char*> parts_raw;
std::stringstream in(cmd);
for(std::string part; std::getline(in, part, ' '); )
for (std::string part; std::getline(in, part, ' ');)
{
if(part.empty())
if (part.empty())
continue;
parts_str.push_back(part);
}
for(const auto & part : parts_str)
for (const auto& part : parts_str)
{
parts_raw.push_back(part.c_str());
}
parts_raw.push_back(nullptr);
const auto pid = fork();
if(pid == -1)
if (pid == -1)
{
throw std::runtime_error("failed to fork");
}
else if(pid == 0)
else if (pid == 0)
{
char * const * args = (char * const *) &parts_raw[1];
char* const* args = (char* const*)parts_raw.data();
const auto result = execv(parts_raw[0], args);
if(result)
if (result)
{
std::cout << "failed: " << result << std::endl;
}
@ -313,7 +313,6 @@ Execute(std::string cmd)
{
waitpid(pid, 0, 0);
}
}
void