diff --git a/Meta/Lagom/Tools/CodeGenerators/IPCCompiler/main.cpp b/Meta/Lagom/Tools/CodeGenerators/IPCCompiler/main.cpp index 52b7433086c..3c4e10ed020 100644 --- a/Meta/Lagom/Tools/CodeGenerators/IPCCompiler/main.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/IPCCompiler/main.cpp @@ -293,21 +293,6 @@ DeprecatedString constructor_for_message(DeprecatedString const& name, Vector const& parameters, DeprecatedString const& response_type = {}) { auto pascal_name = pascal_case(name); @@ -353,7 +338,7 @@ public:)~~~"); static i32 static_message_id() { return (int)MessageID::@message.pascal_name@; } virtual const char* message_name() const override { return "@endpoint.name@::@message.pascal_name@"; } - static ErrorOr> decode(InputMemoryStream& stream, Core::Stream::LocalSocket& socket) + static ErrorOr> decode(Core::Stream::Stream& stream, Core::Stream::LocalSocket& socket) { IPC::Decoder decoder { stream, socket };)~~~"); @@ -387,7 +372,6 @@ public:)~~~"); } message_generator.set("message.constructor_call_parameters", builder.build()); - append_handle_stream_error(message_generator, "Failed to read the message"sv); message_generator.appendln(R"~~~( return make<@message.pascal_name@>(@message.constructor_call_parameters@); })~~~"); @@ -602,10 +586,8 @@ public: static ErrorOr> decode_message(ReadonlyBytes buffer, [[maybe_unused]] Core::Stream::LocalSocket& socket) { - InputMemoryStream stream { buffer }; - u32 message_endpoint_magic = 0; - stream >> message_endpoint_magic;)~~~"); - append_handle_stream_error(generator, "Failed to read message endpoint magic"sv); + auto stream = TRY(Core::Stream::FixedMemoryStream::construct(buffer)); + auto message_endpoint_magic = TRY(stream->read_value());)~~~"); generator.append(R"~~~( if (message_endpoint_magic != @endpoint.magic@) {)~~~"); @@ -617,9 +599,7 @@ public: return Error::from_string_literal("Endpoint magic number mismatch, not my message!"); } - i32 message_id = 0; - stream >> message_id;)~~~"); - append_handle_stream_error(generator, "Failed to read message ID"sv); + auto message_id = TRY(stream->read_value());)~~~"); generator.appendln(R"~~~( switch (message_id) {)~~~"); @@ -633,7 +613,7 @@ public: message_generator.append(R"~~~( case (int)Messages::@endpoint.name@::MessageID::@message.pascal_name@: - return TRY(Messages::@endpoint.name@::@message.pascal_name@::decode(stream, socket));)~~~"); + return TRY(Messages::@endpoint.name@::@message.pascal_name@::decode(*stream, socket));)~~~"); }; do_decode_message(message.name); @@ -787,11 +767,11 @@ void build(StringBuilder& builder, Vector const& endpoints) } } - generator.appendln(R"~~~(#include -#include + generator.appendln(R"~~~(#include #include #include #include +#include #include #include #include diff --git a/Userland/Libraries/LibIPC/Decoder.h b/Userland/Libraries/LibIPC/Decoder.h index 1dec4958ac9..1a8a3e7aefd 100644 --- a/Userland/Libraries/LibIPC/Decoder.h +++ b/Userland/Libraries/LibIPC/Decoder.h @@ -33,7 +33,7 @@ inline ErrorOr decode(Decoder&) class Decoder { public: - Decoder(InputMemoryStream& stream, Core::Stream::LocalSocket& socket) + Decoder(Core::Stream::Stream& stream, Core::Stream::LocalSocket& socket) : m_stream(stream) , m_socket(socket) { @@ -45,8 +45,13 @@ public: template ErrorOr decode_into(T& value) { - m_stream >> value; - TRY(m_stream.try_handle_any_error()); + value = TRY(m_stream.read_value()); + return {}; + } + + ErrorOr decode_into(Bytes bytes) + { + TRY(m_stream.read_entire_buffer(bytes)); return {}; } @@ -55,7 +60,7 @@ public: Core::Stream::LocalSocket& socket() { return m_socket; } private: - InputMemoryStream& m_stream; + Core::Stream::Stream& m_stream; Core::Stream::LocalSocket& m_socket; };