浏览代码

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

default_compile_flags
vector-of-bool 3 年前
父节点
当前提交
e53d4b8fc9
共有 1 个文件被更改,包括 9 次插入8 次删除
  1. +9
    -8
      src/dds/proc.nix.cpp

+ 9
- 8
src/dds/proc.nix.cpp 查看文件

@@ -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

正在加载...
取消
保存