// This source code is released into the public domain. module; #include #include #include #include #include "nihil.hh" export module nihil.posix:fexecvp; #ifdef NIHIL_HAVE_FEXECVE import nihil.error; import :argv; import :execv; import :open_in_path; namespace nihil { // execvp: equivalent to execv, except the command is passed as // a filename instead of a file descriptor. If the filename is not // an absolute path, it will be searched for in $PATH. export [[nodiscard]] auto fexecvp(std::filesystem::path const &file, argv &&argv) -> std::expected { auto execfd = open_in_path(file); if (!execfd) return std::unexpected(error( std::format("executable not found in path: {}", file))); return fexecv(std::move(*execfd), std::move(argv)); } } // namespace nihil #endif // NIHIL_HAVE_FEXECVE