Userland: Fail Core::find_executable_in_path on empty inputs

Before this patch, `which ""` or `type ""` would say that the empty
string is `/usr/local/bin/`.

Convert callers to consistently call is_empty() on the returned string
while we're at it, to support eventually removing the is_null() String
state in the future.
This commit is contained in:
Andrew Kaster 2022-01-03 23:43:16 -07:00 committed by Brian Gianforcaro
parent 7f9bd34d07
commit 170a7e263c
Notes: sideshowbarker 2024-07-17 21:43:28 +09:00
3 changed files with 5 additions and 2 deletions

View file

@ -97,6 +97,9 @@ String DirIterator::next_full_path()
String find_executable_in_path(String filename)
{
if (filename.is_empty())
return {};
if (filename.starts_with('/')) {
if (access(filename.characters(), X_OK) == 0)
return filename;

View file

@ -227,7 +227,7 @@ int Shell::builtin_type(int argc, const char** argv)
// check if its an executable in PATH
auto fullpath = Core::find_executable_in_path(command);
if (!fullpath.is_null()) {
if (!fullpath.is_empty()) {
printf("%s is %s\n", command, escape_token(fullpath).characters());
continue;
}

View file

@ -21,7 +21,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
args_parser.parse(arguments);
auto fullpath = Core::find_executable_in_path(filename);
if (fullpath.is_null()) {
if (fullpath.is_empty()) {
warnln("no '{}' in path", filename);
return 1;
}