From b550b092fe6f9cee38d79fc0db407d921f6fddd1 Mon Sep 17 00:00:00 2001 From: Aaron Jacobs Date: Fri, 24 Jul 2015 14:55:35 +1000 Subject: [PATCH] Implemented some other InMessage methods. --- internal/buffer/in_message.go | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/internal/buffer/in_message.go b/internal/buffer/in_message.go index c4a5107..eb4ab7a 100644 --- a/internal/buffer/in_message.go +++ b/internal/buffer/in_message.go @@ -63,17 +63,31 @@ func (m *InMessage) Header() (h *fusekernel.InHeader) { // Return the number of bytes left to consume. func (m *InMessage) Len() uintptr { - panic("TODO") + return uintptr(len(m.remaining)) } // Consume the next n bytes from the message, returning a nil pointer if there // are fewer than n bytes available. func (m *InMessage) Consume(n uintptr) (p unsafe.Pointer) { - panic("TODO") + if m.Len() == 0 || n > m.Len() { + return + } + + p = unsafe.Pointer(&m.remaining[0]) + m.remaining = m.remaining[n:] + + return } // Equivalent to Consume, except returns a slice of bytes. The result will be -// nil if Consume fails. +// nil if Consume would fail. func (m *InMessage) ConsumeBytes(n uintptr) (b []byte) { - panic("TODO") + if n > m.Len() { + return + } + + b = m.remaining[:n] + m.remaining = m.remaining[n:] + + return }