From b5fc1fcb46aed0aeb20e03e6379c926f965beefe Mon Sep 17 00:00:00 2001 From: joshua stein Date: Thu, 30 Jan 2020 17:23:28 -0600 Subject: [PATCH] LibIPC: Add support for 64-bit size_t in IEncoder --- Libraries/LibIPC/IEncoder.h | 45 +++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/Libraries/LibIPC/IEncoder.h b/Libraries/LibIPC/IEncoder.h index cca9b188e8c676..43c634ba646983 100644 --- a/Libraries/LibIPC/IEncoder.h +++ b/Libraries/LibIPC/IEncoder.h @@ -64,6 +64,20 @@ class IEncoder { return *this; } + IEncoder& operator<<(u64 value) + { + m_buffer.ensure_capacity(m_buffer.size() + 8); + m_buffer.unchecked_append((u8)value); + m_buffer.unchecked_append((u8)(value >> 8)); + m_buffer.unchecked_append((u8)(value >> 16)); + m_buffer.unchecked_append((u8)(value >> 24)); + m_buffer.unchecked_append((u8)(value >> 32)); + m_buffer.unchecked_append((u8)(value >> 40)); + m_buffer.unchecked_append((u8)(value >> 48)); + m_buffer.unchecked_append((u8)(value >> 56)); + return *this; + } + IEncoder& operator<<(i8 value) { m_buffer.append((u8)value); @@ -88,10 +102,37 @@ class IEncoder { return *this; } -#ifdef __serenity__ + IEncoder& operator<<(i64 value) + { + m_buffer.ensure_capacity(m_buffer.size() + 8); + m_buffer.unchecked_append((u8)value); + m_buffer.unchecked_append((u8)(value >> 8)); + m_buffer.unchecked_append((u8)(value >> 16)); + m_buffer.unchecked_append((u8)(value >> 24)); + m_buffer.unchecked_append((u8)(value >> 32)); + m_buffer.unchecked_append((u8)(value >> 40)); + m_buffer.unchecked_append((u8)(value >> 48)); + m_buffer.unchecked_append((u8)(value >> 56)); + return *this; + } + IEncoder& operator<<(size_t value) { - return *this << (u32)value; + if constexpr(sizeof(size_t) == 4) + return *this << (u32)value; + else if constexpr(sizeof(size_t) == 8) + return *this << (u64)value; + ASSERT_NOT_REACHED(); + } + +#ifndef __i386__ + IEncoder& operator<<(ssize_t value) + { + if constexpr(sizeof(ssize_t) == 4) + return *this << (i32)value; + else if constexpr(sizeof(ssize_t) == 8) + return *this << (i64)value; + ASSERT_NOT_REACHED(); } #endif