platform_state* platform; // static uint64_t GenRandom64() { uint64_t buf; ssize_t got = getrandom(&buf, sizeof(buf), 0); ASSERT(got == sizeof(buf)); return buf; } static auto EnsureSigchldReaper() -> bool { static bool installed = false; if (installed) return true; struct sigaction sa; sa.sa_handler = [](int signum) -> void { pid_t pid; int status; while ((pid = waitpid(-1, &status, WNOHANG)) > 0) ; }; sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; if (sigaction(SIGCHLD, &sa, nullptr) == -1) { LOG("sigaction failed"); return false; } installed = true; return true; } static bool Spawn(char** cmd, uint32_t cmdSize) { if (!EnsureSigchldReaper()) return false; if (cmdSize <= 1) return false; if (cmd[cmdSize - 1] != nullptr) return false; switch (fork()) { case -1: return false; case 0: break; default: return true; } int devNullFd = open("/dev/null", O_RDWR); if (devNullFd != -1) { dup2(devNullFd, STDIN_FILENO); dup2(devNullFd, STDOUT_FILENO); dup2(devNullFd, STDERR_FILENO); } if (close_range(3, ~0U, CLOSE_RANGE_UNSHARE) != 0) { goto failure; } execvp(cmd[0], cmd); failure: _exit(127); } // void PlatformTearDown() { }