diff options
Diffstat (limited to 'Ladybird/HelperProcess.cpp')
-rw-r--r-- | Ladybird/HelperProcess.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/Ladybird/HelperProcess.cpp b/Ladybird/HelperProcess.cpp new file mode 100644 index 0000000000..52a0d0ca68 --- /dev/null +++ b/Ladybird/HelperProcess.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023, Andrew Kaster <akaster@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include "HelperProcess.h" +#include "Utilities.h" +#include <AK/String.h> +#include <QCoreApplication> + +ErrorOr<void> spawn_helper_process(StringView process_name, Span<StringView> arguments, Core::System::SearchInPath search_in_path, Optional<Span<StringView>> environment) +{ + auto paths = TRY(get_paths_for_helper_process(process_name)); + VERIFY(!paths.is_empty()); + ErrorOr<void> result; + for (auto const& path : paths) { + arguments[0] = path.bytes_as_string_view(); + result = Core::System::exec(path, arguments, search_in_path, environment); + if (!result.is_error()) + break; + } + + return result; +} + +ErrorOr<Vector<String>> get_paths_for_helper_process(StringView process_name) +{ + Vector<String> paths; + TRY(paths.try_append(TRY(String::formatted("./{}/{}", process_name, process_name)))); + TRY(paths.try_append(TRY(String::formatted("{}/{}", TRY(ak_string_from_qstring(QCoreApplication::applicationDirPath())), process_name)))); + TRY(paths.try_append(TRY(String::formatted("./{}", process_name)))); + // NOTE: Add platform-specific paths here + return paths; +} |