diff --git a/Libraries/LibIPC/Forward.h b/Libraries/LibIPC/Forward.h index 30c28bc192a..06e2678cd9c 100644 --- a/Libraries/LibIPC/Forward.h +++ b/Libraries/LibIPC/Forward.h @@ -10,6 +10,7 @@ namespace IPC { +class AutoCloseFileDescriptor; class Decoder; class Encoder; class Message; @@ -23,4 +24,7 @@ ErrorOr encode(Encoder&, T const&); template ErrorOr decode(Decoder&); +using MessageDataType = Vector; +using MessageFileType = Vector, 1>; + } diff --git a/Libraries/LibIPC/Message.cpp b/Libraries/LibIPC/Message.cpp index 680cc329d08..864250f6d6f 100644 --- a/Libraries/LibIPC/Message.cpp +++ b/Libraries/LibIPC/Message.cpp @@ -35,6 +35,13 @@ ErrorOr MessageBuffer::append_file_descriptor(int fd) return {}; } +ErrorOr MessageBuffer::extend(MessageBuffer&& buffer) +{ + TRY(m_data.try_extend(move(buffer.m_data))); + TRY(m_fds.try_extend(move(buffer.m_fds))); + return {}; +} + ErrorOr MessageBuffer::transfer_message(Transport& transport) { Checked checked_message_size { m_data.size() }; diff --git a/Libraries/LibIPC/Message.h b/Libraries/LibIPC/Message.h index c0cc534219e..7ecce67c818 100644 --- a/Libraries/LibIPC/Message.h +++ b/Libraries/LibIPC/Message.h @@ -10,6 +10,7 @@ #include #include #include +#include #include namespace IPC { @@ -18,7 +19,7 @@ class MessageBuffer { public: MessageBuffer(); - MessageBuffer(Vector data, Vector, 1> fds) + MessageBuffer(MessageDataType data, MessageFileType fds) : m_data(move(data)) , m_fds(move(fds)) { @@ -29,14 +30,19 @@ public: ErrorOr append_file_descriptor(int fd); + ErrorOr extend(MessageBuffer&& buffer); + ErrorOr transfer_message(Transport& transport); - auto const& data() const { return m_data; } - auto take_fds() { return move(m_fds); } + MessageDataType const& data() const { return m_data; } + MessageDataType take_data() { return move(m_data); } + + MessageFileType const& fds() const { return m_fds; } + MessageFileType take_fds() { return move(m_fds); } private: - Vector m_data; - Vector, 1> m_fds; + MessageDataType m_data; + MessageFileType m_fds; #ifdef AK_OS_WINDOWS Vector m_handle_offsets; #endif diff --git a/Libraries/LibIPC/MessageWindows.cpp b/Libraries/LibIPC/MessageWindows.cpp index 3eb3dbc7197..c5be237c534 100644 --- a/Libraries/LibIPC/MessageWindows.cpp +++ b/Libraries/LibIPC/MessageWindows.cpp @@ -55,6 +55,14 @@ ErrorOr MessageBuffer::append_file_descriptor(int handle) return {}; } +ErrorOr MessageBuffer::extend(MessageBuffer&& buffer) +{ + TRY(m_data.try_extend(move(buffer.m_data))); + TRY(m_fds.try_extend(move(buffer.m_fds))); + TRY(m_handle_offsets.try_extend(move(buffer.m_handle_offsets))); + return {}; +} + ErrorOr MessageBuffer::transfer_message(Transport& transport) { Checked checked_message_size { m_data.size() };