diff --git a/fuseops/convert.go b/fuseops/convert.go index 220a91b..d0ad973 100644 --- a/fuseops/convert.go +++ b/fuseops/convert.go @@ -50,7 +50,7 @@ func Convert( var io internalOp switch m.Header().Opcode { case fusekernel.OpLookup: - buf := m.Bytes() + buf := m.ConsumeBytes(m.Len()) n := len(buf) if n == 0 || buf[n-1] != '\x00' { err = errors.New("Corrupt OpLookup") @@ -74,8 +74,9 @@ func Convert( co = &to.commonOp case fusekernel.OpSetattr: - in := (*fusekernel.SetattrIn)(m.Data()) - if m.Len() < unsafe.Sizeof(*in) { + type input fusekernel.SetattrIn + in := (*input)(m.Consume(unsafe.Sizeof(input{}))) + if in == nil { err = errors.New("Corrupt OpSetattr") return } @@ -109,8 +110,9 @@ func Convert( co = &to.commonOp case fusekernel.OpForget: - in := (*fusekernel.ForgetIn)(m.Data()) - if m.Len() < unsafe.Sizeof(*in) { + type input fusekernel.ForgetIn + in := (*input)(m.Consume(unsafe.Sizeof(input{}))) + if in == nil { err = errors.New("Corrupt OpForget") return } diff --git a/internal/buffer/in_message.go b/internal/buffer/in_message.go index 26386d6..c991b9a 100644 --- a/internal/buffer/in_message.go +++ b/internal/buffer/in_message.go @@ -41,6 +41,11 @@ func (m *InMessage) Header() (h *fusekernel.InHeader) { panic("TODO") } +// Return the number of bytes left to consume. +func (m *InMessage) Len() uintptr { + panic("TODO") +} + // 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) {