Use buffer in commonOp.Respond.
parent
9c1134ca3f
commit
7784641da1
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue