1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /*
- * Copyright (c) 2020, Itamar S. <itamar8910@gmail.com>
- * Copyright (c) 2022, David Tuin <davidot@serenityos.org>
- * Copyright (c) 2023, Shannon Booth <shannon@serenityos.org>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
- #pragma once
- #include <AK/ByteBuffer.h>
- #include <AK/LexicalPath.h>
- #include <AK/Optional.h>
- #include <AK/String.h>
- #include <LibCore/File.h>
- #include <LibCore/Forward.h>
- #include <spawn.h>
- namespace Core {
- // FIXME: Unify this and the below 'command' functions with Command class below
- struct CommandResult {
- int exit_code { 0 };
- ByteBuffer output;
- ByteBuffer error;
- };
- ErrorOr<CommandResult> command(ByteString const& program, Vector<ByteString> const& arguments, Optional<LexicalPath> chdir);
- ErrorOr<CommandResult> command(ByteString const& command_string, Optional<LexicalPath> chdir);
- class Command {
- public:
- struct ProcessOutputs {
- ByteBuffer standard_output;
- ByteBuffer standard_error;
- };
- static ErrorOr<OwnPtr<Command>> create(StringView command, char const* const arguments[]);
- Command(pid_t pid, NonnullOwnPtr<Core::File> stdin_file, NonnullOwnPtr<Core::File> stdout_file, NonnullOwnPtr<Core::File> stderr_file);
- ErrorOr<void> write(StringView input);
- ErrorOr<void> write_lines(Span<ByteString> lines);
- ErrorOr<ProcessOutputs> read_all();
- enum class ProcessResult {
- Running,
- DoneWithZeroExitCode,
- Failed,
- FailedFromTimeout,
- Unknown,
- };
- ErrorOr<ProcessResult> status(int options = 0);
- private:
- pid_t m_pid { -1 };
- NonnullOwnPtr<Core::File> m_stdin;
- NonnullOwnPtr<Core::File> m_stdout;
- NonnullOwnPtr<Core::File> m_stderr;
- };
- }
|