diff --git a/Userland/Libraries/LibCore/Stream.cpp b/Userland/Libraries/LibCore/Stream.cpp index 507df05df8..6e328b791d 100644 --- a/Userland/Libraries/LibCore/Stream.cpp +++ b/Userland/Libraries/LibCore/Stream.cpp @@ -830,4 +830,33 @@ bool WrapInAKInputStream::discard_or_error(size_t count) return true; } +WrapInAKOutputStream::WrapInAKOutputStream(Core::Stream::Stream& stream) + : m_stream(stream) +{ +} + +size_t WrapInAKOutputStream::write(ReadonlyBytes bytes) +{ + if (has_any_error()) + return 0; + + auto length_or_error = m_stream.write(bytes); + if (length_or_error.is_error()) { + set_fatal_error(); + return 0; + } + + return length_or_error.value(); +} + +bool WrapInAKOutputStream::write_or_error(ReadonlyBytes bytes) +{ + if (write(bytes) < bytes.size()) { + set_fatal_error(); + return false; + } + + return true; +} + } diff --git a/Userland/Libraries/LibCore/Stream.h b/Userland/Libraries/LibCore/Stream.h index 385704e5e2..8d3546f861 100644 --- a/Userland/Libraries/LibCore/Stream.h +++ b/Userland/Libraries/LibCore/Stream.h @@ -1041,4 +1041,15 @@ private: Core::Stream::Stream& m_stream; }; +// Note: This is only a temporary hack, to break up the task of moving away from AK::Stream into smaller parts. +class WrapInAKOutputStream final : public OutputStream { +public: + WrapInAKOutputStream(Core::Stream::Stream& stream); + virtual size_t write(ReadonlyBytes) override; + virtual bool write_or_error(ReadonlyBytes) override; + +private: + Core::Stream::Stream& m_stream; +}; + }