Commit bb88db68 authored by Aaron Jacobs's avatar Aaron Jacobs

OutMessage.Append

parent 75e2706a
......@@ -15,7 +15,9 @@
package buffer
import (
"fmt"
"log"
"reflect"
"unsafe"
"github.com/jacobsa/fuse/internal/fusekernel"
......@@ -87,8 +89,16 @@ func (b *OutMessage) GrowNoZero(size uintptr) (p unsafe.Pointer) {
// Equivalent to growing by the length of p, then copying p over the new
// segment. Panics if there is not enough room available.
func (b *OutMessage) Append(p []byte) {
panic("TODO")
func (b *OutMessage) Append(src []byte) {
p := b.GrowNoZero(uintptr(len(src)))
if p == nil {
panic(fmt.Sprintf("Can't grow %d bytes", len(src)))
}
sh := (*reflect.SliceHeader)(unsafe.Pointer(&src))
memmove(p, unsafe.Pointer(sh.Data), uintptr(sh.Len))
return
}
// Equivalent to growing by the length of s, then copying s over the new
......
......@@ -20,3 +20,8 @@ import "unsafe"
// Zero the n bytes starting at p.
func memclr(p unsafe.Pointer, n uintptr)
//go:noescape
// Copy from src to dst, allowing overlap.
func memmove(dst unsafe.Pointer, src unsafe.Pointer, n uintptr)
......@@ -31,3 +31,6 @@
TEXT ·memclr(SB),NOSPLIT,$0-16
JMP runtime·memclr(SB)
TEXT ·memmove(SB),NOSPLIT,$0-24
JMP runtime·memmove(SB)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment