diff options
Diffstat (limited to 'mojo/system/message_in_transit.cc')
-rw-r--r-- | mojo/system/message_in_transit.cc | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/mojo/system/message_in_transit.cc b/mojo/system/message_in_transit.cc index b7c536e..2eb9e26 100644 --- a/mojo/system/message_in_transit.cc +++ b/mojo/system/message_in_transit.cc @@ -77,6 +77,33 @@ void MessageInTransit::Destroy() { base::AlignedFree(this); } +// static +bool MessageInTransit::GetNextMessageSize(const void* buffer, + size_t buffer_size, + size_t* next_message_size) { + DCHECK(buffer); + DCHECK_EQ(reinterpret_cast<uintptr_t>(buffer) % + MessageInTransit::kMessageAlignment, 0u); + DCHECK(next_message_size); + + if (buffer_size < sizeof(Header)) + return false; + + const Header* header = static_cast<const Header*>(buffer); + *next_message_size = + RoundUpMessageAlignment(sizeof(MessageInTransit) + header->data_size); + return true; +} + +// static +const MessageInTransit* MessageInTransit::CreateReadOnlyFromBuffer( + const void* buffer) { + DCHECK(buffer); + DCHECK_EQ(reinterpret_cast<uintptr_t>(buffer) % + MessageInTransit::kMessageAlignment, 0u); + return static_cast<const MessageInTransit*>(buffer); +} + MessageInTransit::MessageInTransit(uint32_t data_size, Type type, Subtype subtype, |