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

@@ -37,6 +37,9 @@ void check_rc(bool b, std::string_view s) {
strings.push_back(nullptr);

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();
if (child_pid != 0) {
@@ -54,16 +57,14 @@ void check_rc(bool b, std::string_view s) {
::execvp(strings[0], (char* const*)strings.data());

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

Loading…
Cancel
Save