Browse Source

[Fix #34] Immediate-exit and no stdlib when ::exec() fails.

default_compile_flags
vector-of-bool 3 years ago
parent
commit
e53d4b8fc9
1 changed files with 9 additions and 8 deletions
  1. +9
    -8
      src/dds/proc.nix.cpp

+ 9
- 8
src/dds/proc.nix.cpp View File

strings.push_back(nullptr); strings.push_back(nullptr);


std::string workdir = opts.cwd.value_or(fs::current_path()).string(); std::string workdir = opts.cwd.value_or(fs::current_path()).string();
auto not_found_err
= fmt::format("[dds child executor] The requested executable [{}] could not be found.",
strings[0]);


auto child_pid = ::fork(); auto child_pid = ::fork();
if (child_pid != 0) { if (child_pid != 0) {
::execvp(strings[0], (char* const*)strings.data()); ::execvp(strings[0], (char* const*)strings.data());


if (errno == ENOENT) { if (errno == ENOENT) {
std::cerr
<< fmt::format("[dds child executor] The requested executable ({}) could not be found.",
strings[0]);
std::exit(-1);
std::fputs(not_found_err.c_str(), stderr);
std::_Exit(-1);
} }


std::cerr << "[dds child executor] execvp returned! This is a fatal error: "
<< std::system_category().message(errno) << '\n';
std::exit(-1);
std::fputs("[dds child executor] execvp returned! This is a fatal error: ", stderr);
std::fputs(std::strerror(errno), stderr);
std::fputs("\n", stderr);
std::_Exit(-1);
} }


} // namespace } // namespace

Loading…
Cancel
Save