aboutsummaryrefslogtreecommitdiffstats
path: root/nihil.posix/find_in_path.cc
diff options
context:
space:
mode:
authorLexi Winter <lexi@le-fay.org>2025-06-28 20:40:25 +0100
committerLexi Winter <lexi@le-fay.org>2025-06-28 20:40:25 +0100
commitc54ff48ac3abb62a40eb1a438da8e3e7ef139797 (patch)
tree4a78c556c7cbc6d3d7e364ca0c52c57ac0f5094b /nihil.posix/find_in_path.cc
parenta2d7181700ac64b8e7a4472ec26dfa253b38f188 (diff)
downloadnihil-c54ff48ac3abb62a40eb1a438da8e3e7ef139797.tar.gz
nihil-c54ff48ac3abb62a40eb1a438da8e3e7ef139797.tar.bz2
posix: add tempfile()
Diffstat (limited to 'nihil.posix/find_in_path.cc')
-rw-r--r--nihil.posix/find_in_path.cc52
1 files changed, 0 insertions, 52 deletions
diff --git a/nihil.posix/find_in_path.cc b/nihil.posix/find_in_path.cc
deleted file mode 100644
index 6be963c..0000000
--- a/nihil.posix/find_in_path.cc
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * This source code is released into the public domain.
- */
-
-module;
-
-#include <filesystem>
-#include <optional>
-#include <ranges>
-#include <string>
-
-#include <fcntl.h>
-#include <paths.h>
-
-module nihil.posix;
-
-namespace nihil {
-
-auto find_in_path(std::filesystem::path const &file)
- -> std::optional<fd>
-{
- using namespace std::literals;
-
- auto try_open =
- [](std::filesystem::path const &file) -> std::optional<fd>
- {
- auto ret = open(file, O_EXEC);
- if (ret)
- return {std::move(*ret)};
- return {};
- };
-
- // Absolute pathname skips the search.
- if (file.is_absolute())
- return try_open(file);
-
- auto path = getenv("PATH").value_or(_PATH_DEFPATH);
-
- for (auto &&dir : path | std::views::split(':')) {
- // An empty $PATH element means cwd.
- auto sdir = dir.empty()
- ? std::filesystem::path(".")
- : std::filesystem::path(std::string_view(dir));
-
- if (auto ret = try_open(sdir / file); ret)
- return ret;
- }
-
- return {};
-}
-
-} // namespace nihil