Use buffer in commonOp.Respond.

geesefs-0-30-9
Aaron Jacobs 2015-07-24 13:41:05 +10:00
parent 9c1134ca3f
commit 7784641da1
2 changed files with 12 additions and 12 deletions

View File

@ -19,9 +19,8 @@ import (
"log" "log"
"reflect" "reflect"
"strings" "strings"
"unsafe"
"github.com/jacobsa/fuse/internal/fusekernel" "github.com/jacobsa/fuse/internal/buffer"
"github.com/jacobsa/fuse/internal/fuseshim" "github.com/jacobsa/fuse/internal/fuseshim"
"github.com/jacobsa/reqtrace" "github.com/jacobsa/reqtrace"
"golang.org/x/net/context" "golang.org/x/net/context"
@ -32,12 +31,12 @@ import (
type internalOp interface { type internalOp interface {
Op Op
// Create a response message for the kernel, with leading pading for a // Create a response message for the kernel, leaving the leading
// fusekernel.OutHeader struct. // fusekernel.OutHeader untouched.
// //
// Special case: a return value of nil means that the kernel is not expecting // Special case: a zero return value means that the kernel is not expecting a
// a response. // response.
kernelResponse() []byte kernelResponse() (b buffer.Buffer)
} }
// A function that sends a reply message back to the kernel for the request // A function that sends a reply message back to the kernel for the request
@ -143,16 +142,17 @@ func (o *commonOp) Respond(err error) {
// If successful, we ask the op for an appopriate response to the kernel, and // If successful, we ask the op for an appopriate response to the kernel, and
// it is responsible for leaving room for the fusekernel.OutHeader struct. // it is responsible for leaving room for the fusekernel.OutHeader struct.
// Otherwise, create our own. // Otherwise, create our own.
var msg []byte var b buffer.Buffer
if err == nil { if err == nil {
msg = o.op.kernelResponse() b = o.op.kernelResponse()
} else { } else {
msg = fuseshim.NewBuffer(0) b = buffer.New(0)
} }
// Fill in the header if a reply is needed. // Fill in the header if a reply is needed.
msg := b.Bytes()
if msg != nil { if msg != nil {
h := (*fusekernel.OutHeader)(unsafe.Pointer(&msg[0])) h := b.OutHeader()
h.Unique = o.fuseID h.Unique = o.fuseID
h.Len = uint32(len(msg)) h.Len = uint32(len(msg))
if err != nil { if err != nil {

View File

@ -25,7 +25,7 @@ import (
// message from multiple segments, where the first segment is always a // message from multiple segments, where the first segment is always a
// fusekernel.OutHeader message. // fusekernel.OutHeader message.
// //
// Must be created with New. // Must be created with New. Exception: the zero value has Bytes() == nil.
type Buffer struct { type Buffer struct {
slice []byte slice []byte
} }