diff options
Diffstat (limited to 'Libraries')
-rw-r--r-- | Libraries/LibCore/DirIterator.cpp | 20 | ||||
-rw-r--r-- | Libraries/LibCore/DirIterator.h | 2 |
2 files changed, 22 insertions, 0 deletions
diff --git a/Libraries/LibCore/DirIterator.cpp b/Libraries/LibCore/DirIterator.cpp index 537b29eb85..3272e05921 100644 --- a/Libraries/LibCore/DirIterator.cpp +++ b/Libraries/LibCore/DirIterator.cpp @@ -25,6 +25,7 @@ */ #include <LibCore/DirIterator.h> +#include <AK/Vector.h> #include <errno.h> namespace Core { @@ -98,4 +99,23 @@ String DirIterator::next_full_path() return String::format("%s/%s", m_path.characters(), next_path().characters()); } +String find_executable_in_path(String filename) +{ + if (filename.starts_with('/')) { + if (access(filename.characters(), X_OK) == 0) + return filename; + + return {}; + } + + for (auto directory : StringView { getenv("PATH") }.split_view(':')) { + auto fullpath = String::format("%s/%s", directory, filename); + + if (access(fullpath.characters(), X_OK) == 0) + return fullpath; + } + + return {}; +} + } diff --git a/Libraries/LibCore/DirIterator.h b/Libraries/LibCore/DirIterator.h index b3a2c5a5bd..7f423b4f17 100644 --- a/Libraries/LibCore/DirIterator.h +++ b/Libraries/LibCore/DirIterator.h @@ -60,4 +60,6 @@ private: bool advance_next(); }; +String find_executable_in_path(String filename); + } |