summaryrefslogtreecommitdiff
path: root/Libraries
diff options
context:
space:
mode:
Diffstat (limited to 'Libraries')
-rw-r--r--Libraries/LibCore/DirIterator.cpp20
-rw-r--r--Libraries/LibCore/DirIterator.h2
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);
+
}