1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 14:47:44 +00:00

LibCore: Avoid DeprecatedFile for resolve_executable_from_environment

This commit is contained in:
Ben Wiederhake 2023-05-29 22:39:49 +02:00 committed by Jelle Raaijmakers
parent f20d04726a
commit 800a0092ca

View file

@ -1263,20 +1263,20 @@ ErrorOr<void> exec(StringView filename, ReadonlySpan<StringView> arguments, Sear
return {}; return {};
}; };
DeprecatedString exec_filename; StringView exec_filename;
if (search_in_path == SearchInPath::Yes) { if (search_in_path == SearchInPath::Yes) {
auto maybe_executable = Core::DeprecatedFile::resolve_executable_from_environment(filename); auto executable_or_error = resolve_executable_from_environment(filename);
if (!maybe_executable.has_value()) if (executable_or_error.is_error())
return ENOENT; return executable_or_error.release_error();
exec_filename = maybe_executable.release_value(); exec_filename = executable_or_error.value();
} else { } else {
exec_filename = filename.to_deprecated_string(); exec_filename = filename;
} }
params.path = { exec_filename.characters(), exec_filename.length() }; params.path = { exec_filename.characters_without_null_termination(), exec_filename.length() };
TRY(run_exec(params)); TRY(run_exec(params));
VERIFY_NOT_REACHED(); VERIFY_NOT_REACHED();
#else #else
@ -1305,14 +1305,15 @@ ErrorOr<void> exec(StringView filename, ReadonlySpan<StringView> arguments, Sear
// These BSDs don't support execvpe(), so we'll have to manually search the PATH. // These BSDs don't support execvpe(), so we'll have to manually search the PATH.
ScopedValueRollback errno_rollback(errno); ScopedValueRollback errno_rollback(errno);
auto maybe_executable = Core::DeprecatedFile::resolve_executable_from_environment(filename_string); auto executable_or_error = resolve_executable_from_environment(filename_string);
if (!maybe_executable.has_value()) { if (executable_or_error.is_error()) {
errno_rollback.set_override_rollback_value(ENOENT); errno_rollback.set_override_rollback_value(executable_or_error.error().code());
return Error::from_errno(ENOENT); return executable_or_error.release_error();
} }
rc = ::execve(maybe_executable.release_value().characters(), argv.data(), envp.data()); DeprecatedString executable = executable_or_error.release_value().to_deprecated_string();
rc = ::execve(executable.characters(), argv.data(), envp.data());
# else # else
rc = ::execvpe(filename_string.characters(), argv.data(), envp.data()); rc = ::execvpe(filename_string.characters(), argv.data(), envp.data());
# endif # endif