diff --git a/src/include/souffle/utility/SubProcess.h b/src/include/souffle/utility/SubProcess.h index 93b4eb76190..497c40697b5 100644 --- a/src/include/souffle/utility/SubProcess.h +++ b/src/include/souffle/utility/SubProcess.h @@ -78,12 +78,12 @@ std::optional execute( if (::setenv(k, v, 1)) detail::perrorExit("setenv"); } - char* argv_temp[argv.size() + 2]; + std::vector argv_temp(argv.size() + 2); argv_temp[0] = const_cast(program.c_str()); - std::copy_n(argv.data(), argv.size(), const_cast(argv_temp) + 1); + std::copy_n(argv.data(), argv.size(), const_cast(argv_temp.data()) + 1); argv_temp[argv.size() + 1] = nullptr; - ::execvp(program.c_str(), argv_temp); + ::execvp(program.c_str(), argv_temp.data()); std::exit(EC::cannot_execute); } @@ -195,9 +195,8 @@ std::optional execute( std::unique_ptr[]> envp_temp = std::make_unique[]>(envp.size()); auto argv_ptr = go(argv_temp.get(), argv, [](auto&& x) { return x.c_str(); }); - auto envp_ptr = go(envp_temp.get(), envp, [](auto&& kv) { - return std::pair{kv.first, kv.second.c_str()}; - }); + auto envp_ptr = + go(envp_temp.get(), envp, [](auto&& kv) { return std::pair{kv.first, kv.second.c_str()}; }); return souffle::execute(program, argv_ptr, envp_ptr); }