diff --git a/Tests/JSSpecCompiler/test-runner.cpp b/Tests/JSSpecCompiler/test-runner.cpp index eaedb29d4c..4a0d653577 100644 --- a/Tests/JSSpecCompiler/test-runner.cpp +++ b/Tests/JSSpecCompiler/test-runner.cpp @@ -152,7 +152,7 @@ TEST_CASE(test_regression) auto path_to_expectation = LexicalPath::join(path_to_tests_directory.string(), ByteString::formatted("{}.expectation", source)); auto process = MUST(Core::Process::spawn({ - .path = path_to_compiler_binary.string(), + .executable = path_to_compiler_binary.string(), .arguments = build_command_line_arguments(path_to_test, test_description), .file_actions = { Core::FileAction::OpenFile { diff --git a/Userland/Libraries/LibCore/Process.cpp b/Userland/Libraries/LibCore/Process.cpp index 472167f677..9ad3b50231 100644 --- a/Userland/Libraries/LibCore/Process.cpp +++ b/Userland/Libraries/LibCore/Process.cpp @@ -94,19 +94,23 @@ ErrorOr Process::spawn(ProcessSpawnOptions const& options) #undef CHECK - ArgvList argv_list(options.path, options.arguments.size()); + ArgvList argv_list(options.executable, options.arguments.size()); for (auto const& argument : options.arguments) argv_list.append(argument.characters()); - auto pid = TRY(System::posix_spawn(options.path.view(), &spawn_actions, nullptr, const_cast(argv_list.get().data()), System::environment())); - + pid_t pid; + if (options.search_for_executable_in_path) { + pid = TRY(System::posix_spawnp(options.executable.view(), &spawn_actions, nullptr, const_cast(argv_list.get().data()), System::environment())); + } else { + pid = TRY(System::posix_spawn(options.executable.view(), &spawn_actions, nullptr, const_cast(argv_list.get().data()), System::environment())); + } return Process { pid }; } ErrorOr Process::spawn(StringView path, ReadonlySpan arguments, ByteString working_directory, KeepAsChild keep_as_child) { auto process = TRY(spawn({ - .path = path, + .executable = path, .arguments = Vector { arguments }, .working_directory = working_directory.is_empty() ? Optional {} : Optional { working_directory }, })); @@ -128,7 +132,7 @@ ErrorOr Process::spawn(StringView path, ReadonlySpan argument backing_strings.append(argument); auto process = TRY(spawn({ - .path = path, + .executable = path, .arguments = backing_strings, .working_directory = working_directory.is_empty() ? Optional {} : Optional { working_directory }, })); @@ -148,7 +152,7 @@ ErrorOr Process::spawn(StringView path, ReadonlySpan argumen backing_strings.append(argument); auto process = TRY(spawn({ - .path = path, + .executable = path, .arguments = backing_strings, .working_directory = working_directory.is_empty() ? Optional {} : Optional { working_directory }, })); diff --git a/Userland/Libraries/LibCore/Process.h b/Userland/Libraries/LibCore/Process.h index d50fb856d4..ba7bef16d6 100644 --- a/Userland/Libraries/LibCore/Process.h +++ b/Userland/Libraries/LibCore/Process.h @@ -29,7 +29,8 @@ struct OpenFile { } struct ProcessSpawnOptions { - ByteString path; + ByteString executable; + bool search_for_executable_in_path { false }; Vector const& arguments = {}; Optional working_directory = {}; Vector> const& file_actions = {};