mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 21:57:35 +00:00
parent
8ab601f9e1
commit
173effc88d
1 changed files with 26 additions and 19 deletions
|
@ -631,28 +631,35 @@ void Shell::cache_path()
|
||||||
if (!cached_path.is_empty())
|
if (!cached_path.is_empty())
|
||||||
cached_path.clear_with_capacity();
|
cached_path.clear_with_capacity();
|
||||||
|
|
||||||
String path = getenv("PATH");
|
// Add shell builtins to the cache.
|
||||||
if (path.is_empty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
auto directories = path.split(':');
|
|
||||||
for (const auto& directory : directories) {
|
|
||||||
Core::DirIterator programs(directory.characters(), Core::DirIterator::SkipDots);
|
|
||||||
while (programs.has_next()) {
|
|
||||||
auto program = programs.next_path();
|
|
||||||
String program_path = String::format("%s/%s", directory.characters(), program.characters());
|
|
||||||
auto escaped_name = escape_token(program);
|
|
||||||
if (cached_path.contains_slow(escaped_name))
|
|
||||||
continue;
|
|
||||||
if (access(program_path.characters(), X_OK) == 0)
|
|
||||||
cached_path.append(escaped_name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// add shell builtins to the cache
|
|
||||||
for (const auto& builtin_name : builtin_names)
|
for (const auto& builtin_name : builtin_names)
|
||||||
cached_path.append(escape_token(builtin_name));
|
cached_path.append(escape_token(builtin_name));
|
||||||
|
|
||||||
|
// Add aliases to the cache.
|
||||||
|
for (const auto& alias : m_aliases) {
|
||||||
|
auto name = escape_token(alias.key);
|
||||||
|
if (cached_path.contains_slow(name))
|
||||||
|
continue;
|
||||||
|
cached_path.append(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
String path = getenv("PATH");
|
||||||
|
if (!path.is_empty()) {
|
||||||
|
auto directories = path.split(':');
|
||||||
|
for (const auto& directory : directories) {
|
||||||
|
Core::DirIterator programs(directory.characters(), Core::DirIterator::SkipDots);
|
||||||
|
while (programs.has_next()) {
|
||||||
|
auto program = programs.next_path();
|
||||||
|
String program_path = String::format("%s/%s", directory.characters(), program.characters());
|
||||||
|
auto escaped_name = escape_token(program);
|
||||||
|
if (cached_path.contains_slow(escaped_name))
|
||||||
|
continue;
|
||||||
|
if (access(program_path.characters(), X_OK) == 0)
|
||||||
|
cached_path.append(escaped_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
quick_sort(cached_path);
|
quick_sort(cached_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue