LibIPC: Add some type aliases and MessageBuffer helpers

To re-use some of these wordy types outside of LibIPC, let's add some
aliases.
This commit is contained in:
Timothy Flynn 2025-07-17 09:47:15 -04:00 committed by Tim Flynn
commit fd6d868ae2
Notes: github-actions[bot] 2025-07-18 14:11:24 +00:00
4 changed files with 30 additions and 5 deletions

View file

@ -10,6 +10,7 @@
namespace IPC {
class AutoCloseFileDescriptor;
class Decoder;
class Encoder;
class Message;
@ -23,4 +24,7 @@ ErrorOr<void> encode(Encoder&, T const&);
template<typename T>
ErrorOr<T> decode(Decoder&);
using MessageDataType = Vector<u8, 1024>;
using MessageFileType = Vector<NonnullRefPtr<AutoCloseFileDescriptor>, 1>;
}

View file

@ -35,6 +35,13 @@ ErrorOr<void> MessageBuffer::append_file_descriptor(int fd)
return {};
}
ErrorOr<void> MessageBuffer::extend(MessageBuffer&& buffer)
{
TRY(m_data.try_extend(move(buffer.m_data)));
TRY(m_fds.try_extend(move(buffer.m_fds)));
return {};
}
ErrorOr<void> MessageBuffer::transfer_message(Transport& transport)
{
Checked<MessageSizeType> checked_message_size { m_data.size() };

View file

@ -10,6 +10,7 @@
#include <AK/Error.h>
#include <AK/Vector.h>
#include <LibIPC/AutoCloseFileDescriptor.h>
#include <LibIPC/Forward.h>
#include <LibIPC/Transport.h>
namespace IPC {
@ -18,7 +19,7 @@ class MessageBuffer {
public:
MessageBuffer();
MessageBuffer(Vector<u8, 1024> data, Vector<NonnullRefPtr<AutoCloseFileDescriptor>, 1> fds)
MessageBuffer(MessageDataType data, MessageFileType fds)
: m_data(move(data))
, m_fds(move(fds))
{
@ -29,14 +30,19 @@ public:
ErrorOr<void> append_file_descriptor(int fd);
ErrorOr<void> extend(MessageBuffer&& buffer);
ErrorOr<void> 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<u8, 1024> m_data;
Vector<NonnullRefPtr<AutoCloseFileDescriptor>, 1> m_fds;
MessageDataType m_data;
MessageFileType m_fds;
#ifdef AK_OS_WINDOWS
Vector<size_t> m_handle_offsets;
#endif

View file

@ -55,6 +55,14 @@ ErrorOr<void> MessageBuffer::append_file_descriptor(int handle)
return {};
}
ErrorOr<void> 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<void> MessageBuffer::transfer_message(Transport& transport)
{
Checked<MessageSizeType> checked_message_size { m_data.size() };