Commit bd41a4e7 authored by Aaron Jacobs's avatar Aaron Jacobs

Fixed more build errors.

parent 4dd9732c
...@@ -342,49 +342,49 @@ var releaseFlagNames = []flagName{ ...@@ -342,49 +342,49 @@ var releaseFlagNames = []flagName{
// Opcodes // Opcodes
const ( const (
opLookup = 1 OpLookup = 1
opForget = 2 // no reply OpForget = 2 // no reply
opGetattr = 3 OpGetattr = 3
opSetattr = 4 OpSetattr = 4
opReadlink = 5 OpReadlink = 5
opSymlink = 6 OpSymlink = 6
opMknod = 8 OpMknod = 8
opMkdir = 9 OpMkdir = 9
opUnlink = 10 OpUnlink = 10
opRmdir = 11 OpRmdir = 11
opRename = 12 OpRename = 12
opLink = 13 OpLink = 13
opOpen = 14 OpOpen = 14
opRead = 15 OpRead = 15
opWrite = 16 OpWrite = 16
opStatfs = 17 OpStatfs = 17
opRelease = 18 OpRelease = 18
opFsync = 20 OpFsync = 20
opSetxattr = 21 OpSetxattr = 21
opGetxattr = 22 OpGetxattr = 22
opListxattr = 23 OpListxattr = 23
opRemovexattr = 24 OpRemovexattr = 24
opFlush = 25 OpFlush = 25
opInit = 26 OpInit = 26
opOpendir = 27 OpOpendir = 27
opReaddir = 28 OpReaddir = 28
opReleasedir = 29 OpReleasedir = 29
opFsyncdir = 30 OpFsyncdir = 30
opGetlk = 31 OpGetlk = 31
opSetlk = 32 OpSetlk = 32
opSetlkw = 33 OpSetlkw = 33
opAccess = 34 OpAccess = 34
opCreate = 35 OpCreate = 35
opInterrupt = 36 OpInterrupt = 36
opBmap = 37 OpBmap = 37
opDestroy = 38 OpDestroy = 38
opIoctl = 39 // Linux? OpIoctl = 39 // Linux?
opPoll = 40 // Linux? OpPoll = 40 // Linux?
// OS X // OS X
opSetvolname = 61 OpSetvolname = 61
opGetxtimes = 62 OpGetxtimes = 62
opExchange = 63 OpExchange = 63
) )
type entryOut struct { type entryOut struct {
...@@ -693,7 +693,7 @@ type initIn struct { ...@@ -693,7 +693,7 @@ type initIn struct {
Flags uint32 Flags uint32
} }
const initInSize = int(unsafe.Sizeof(initIn{})) const InitInSize = int(unsafe.Sizeof(initIn{}))
type initOut struct { type initOut struct {
Major uint32 Major uint32
...@@ -729,7 +729,7 @@ type InHeader struct { ...@@ -729,7 +729,7 @@ type InHeader struct {
Padding uint32 Padding uint32
} }
const inHeaderSize = int(unsafe.Sizeof(InHeader{})) const InHeaderSize = int(unsafe.Sizeof(InHeader{}))
type OutHeader struct { type OutHeader struct {
Len uint32 Len uint32
......
package bazilfuse package fuseshim
import "unsafe" import (
"unsafe"
"github.com/jacobsa/fuse/internal/fusekernel"
)
// buffer provides a mechanism for constructing a message from // buffer provides a mechanism for constructing a message from
// multiple segments. // multiple segments.
...@@ -29,7 +33,7 @@ func (w *buffer) reset() { ...@@ -29,7 +33,7 @@ func (w *buffer) reset() {
} }
func newBuffer(extra uintptr) buffer { func newBuffer(extra uintptr) buffer {
const hdrSize = unsafe.Sizeof(outHeader{}) const hdrSize = unsafe.Sizeof(fusekernel.OutHeader{})
buf := make(buffer, hdrSize, hdrSize+extra) buf := make(buffer, hdrSize, hdrSize+extra)
return buf return buf
} }
...@@ -549,19 +549,19 @@ loop: ...@@ -549,19 +549,19 @@ loop:
} }
m.buf = m.buf[:n] m.buf = m.buf[:n]
if n < inHeaderSize { if n < fusekernel.InHeaderSize {
putMessage(m) putMessage(m)
return nil, errors.New("fuse: message too short") return nil, errors.New("fuse: message too short")
} }
// FreeBSD FUSE sends a short length in the header // FreeBSD FUSE sends a short length in the header
// for FUSE_INIT even though the actual read length is correct. // for FUSE_INIT even though the actual read length is correct.
if n == inHeaderSize+initInSize && m.hdr.Opcode == opInit && m.hdr.Len < uint32(n) { if n == fusekernel.InHeaderSize+fusekernel.InitInSize && m.hdr.Opcode == fusekernel.OpInit && m.hdr.Len < uint32(n) {
m.hdr.Len = uint32(n) m.hdr.Len = uint32(n)
} }
// OSXFUSE sometimes sends the wrong m.hdr.Len in a FUSE_WRITE message. // OSXFUSE sometimes sends the wrong m.hdr.Len in a FUSE_WRITE message.
if m.hdr.Len < uint32(n) && m.hdr.Len >= uint32(unsafe.Sizeof(writeIn{})) && m.hdr.Opcode == opWrite { if m.hdr.Len < uint32(n) && m.hdr.Len >= uint32(unsafe.Sizeof(writeIn{})) && m.hdr.Opcode == fusekernel.OpWrite {
m.hdr.Len = uint32(n) m.hdr.Len = uint32(n)
} }
...@@ -572,7 +572,7 @@ loop: ...@@ -572,7 +572,7 @@ loop:
return nil, err return nil, err
} }
m.off = inHeaderSize m.off = fusekernel.InHeaderSize
// Convert to data structures. // Convert to data structures.
// Do not trust kernel to hand us well-formed data. // Do not trust kernel to hand us well-formed data.
...@@ -582,7 +582,7 @@ loop: ...@@ -582,7 +582,7 @@ loop:
Debug(noOpcode{Opcode: m.hdr.Opcode}) Debug(noOpcode{Opcode: m.hdr.Opcode})
goto unrecognized goto unrecognized
case opLookup: case fusekernel.OpLookup:
buf := m.bytes() buf := m.bytes()
n := len(buf) n := len(buf)
if n == 0 || buf[n-1] != '\x00' { if n == 0 || buf[n-1] != '\x00' {
...@@ -593,7 +593,7 @@ loop: ...@@ -593,7 +593,7 @@ loop:
Name: string(buf[:n-1]), Name: string(buf[:n-1]),
} }
case opForget: case fusekernel.OpForget:
in := (*forgetIn)(m.data()) in := (*forgetIn)(m.data())
if m.len() < unsafe.Sizeof(*in) { if m.len() < unsafe.Sizeof(*in) {
goto corrupt goto corrupt
...@@ -603,7 +603,7 @@ loop: ...@@ -603,7 +603,7 @@ loop:
N: in.Nlookup, N: in.Nlookup,
} }
case opGetattr: case fusekernel.OpGetattr:
switch { switch {
case c.proto.LT(fusekernel.Protocol{7, 9}): case c.proto.LT(fusekernel.Protocol{7, 9}):
req = &GetattrRequest{ req = &GetattrRequest{
...@@ -622,7 +622,7 @@ loop: ...@@ -622,7 +622,7 @@ loop:
} }
} }
case opSetattr: case fusekernel.OpSetattr:
in := (*setattrIn)(m.data()) in := (*setattrIn)(m.data())
if m.len() < unsafe.Sizeof(*in) { if m.len() < unsafe.Sizeof(*in) {
goto corrupt goto corrupt
...@@ -642,7 +642,7 @@ loop: ...@@ -642,7 +642,7 @@ loop:
Flags: in.Flags(), Flags: in.Flags(),
} }
case opReadlink: case fusekernel.OpReadlink:
if len(m.bytes()) > 0 { if len(m.bytes()) > 0 {
goto corrupt goto corrupt
} }
...@@ -650,7 +650,7 @@ loop: ...@@ -650,7 +650,7 @@ loop:
Header: m.Header(), Header: m.Header(),
} }
case opSymlink: case fusekernel.OpSymlink:
// m.bytes() is "newName\0target\0" // m.bytes() is "newName\0target\0"
names := m.bytes() names := m.bytes()
if len(names) == 0 || names[len(names)-1] != 0 { if len(names) == 0 || names[len(names)-1] != 0 {
...@@ -667,7 +667,7 @@ loop: ...@@ -667,7 +667,7 @@ loop:
Target: string(target), Target: string(target),
} }
case opLink: case fusekernel.OpLink:
in := (*linkIn)(m.data()) in := (*linkIn)(m.data())
if m.len() < unsafe.Sizeof(*in) { if m.len() < unsafe.Sizeof(*in) {
goto corrupt goto corrupt
...@@ -683,7 +683,7 @@ loop: ...@@ -683,7 +683,7 @@ loop:
NewName: string(newName), NewName: string(newName),
} }
case opMknod: case fusekernel.OpMknod:
size := mknodInSize(c.proto) size := mknodInSize(c.proto)
if m.len() < size { if m.len() < size {
goto corrupt goto corrupt
...@@ -705,7 +705,7 @@ loop: ...@@ -705,7 +705,7 @@ loop:
} }
req = r req = r
case opMkdir: case fusekernel.OpMkdir:
size := mkdirInSize(c.proto) size := mkdirInSize(c.proto)
if m.len() < size { if m.len() < size {
goto corrupt goto corrupt
...@@ -729,7 +729,7 @@ loop: ...@@ -729,7 +729,7 @@ loop:
} }
req = r req = r
case opUnlink, opRmdir: case fusekernel.OpUnlink, fusekernel.OpRmdir:
buf := m.bytes() buf := m.bytes()
n := len(buf) n := len(buf)
if n == 0 || buf[n-1] != '\x00' { if n == 0 || buf[n-1] != '\x00' {
...@@ -738,10 +738,10 @@ loop: ...@@ -738,10 +738,10 @@ loop:
req = &RemoveRequest{ req = &RemoveRequest{
Header: m.Header(), Header: m.Header(),
Name: string(buf[:n-1]), Name: string(buf[:n-1]),
Dir: m.hdr.Opcode == opRmdir, Dir: m.hdr.Opcode == fusekernel.OpRmdir,
} }
case opRename: case fusekernel.OpRename:
in := (*renameIn)(m.data()) in := (*renameIn)(m.data())
if m.len() < unsafe.Sizeof(*in) { if m.len() < unsafe.Sizeof(*in) {
goto corrupt goto corrupt
...@@ -767,25 +767,25 @@ loop: ...@@ -767,25 +767,25 @@ loop:
NewName: newName, NewName: newName,
} }
case opOpendir, opOpen: case fusekernel.OpOpendir, fusekernel.OpOpen:
in := (*openIn)(m.data()) in := (*openIn)(m.data())
if m.len() < unsafe.Sizeof(*in) { if m.len() < unsafe.Sizeof(*in) {
goto corrupt goto corrupt
} }
req = &OpenRequest{ req = &OpenRequest{
Header: m.Header(), Header: m.Header(),
Dir: m.hdr.Opcode == opOpendir, Dir: m.hdr.Opcode == fusekernel.OpOpendir,
Flags: openFlags(in.Flags), Flags: openFlags(in.Flags),
} }
case opRead, opReaddir: case fusekernel.OpRead, fusekernel.OpReaddir:
in := (*readIn)(m.data()) in := (*readIn)(m.data())
if m.len() < readInSize(c.proto) { if m.len() < readInSize(c.proto) {
goto corrupt goto corrupt
} }
r := &ReadRequest{ r := &ReadRequest{
Header: m.Header(), Header: m.Header(),
Dir: m.hdr.Opcode == opReaddir, Dir: m.hdr.Opcode == fusekernel.OpReaddir,
Handle: HandleID(in.Fh), Handle: HandleID(in.Fh),
Offset: int64(in.Offset), Offset: int64(in.Offset),
Size: int(in.Size), Size: int(in.Size),
...@@ -797,7 +797,7 @@ loop: ...@@ -797,7 +797,7 @@ loop:
} }
req = r req = r
case opWrite: case fusekernel.OpWrite:
in := (*writeIn)(m.data()) in := (*writeIn)(m.data())
if m.len() < writeInSize(c.proto) { if m.len() < writeInSize(c.proto) {
goto corrupt goto corrupt
...@@ -819,38 +819,38 @@ loop: ...@@ -819,38 +819,38 @@ loop:
r.Data = buf r.Data = buf
req = r req = r
case opStatfs: case fusekernel.OpStatfs:
req = &StatfsRequest{ req = &StatfsRequest{
Header: m.Header(), Header: m.Header(),
} }
case opRelease, opReleasedir: case fusekernel.OpRelease, fusekernel.OpReleasedir:
in := (*releaseIn)(m.data()) in := (*releaseIn)(m.data())
if m.len() < unsafe.Sizeof(*in) { if m.len() < unsafe.Sizeof(*in) {
goto corrupt goto corrupt
} }
req = &ReleaseRequest{ req = &ReleaseRequest{
Header: m.Header(), Header: m.Header(),
Dir: m.hdr.Opcode == opReleasedir, Dir: m.hdr.Opcode == fusekernel.OpReleasedir,
Handle: HandleID(in.Fh), Handle: HandleID(in.Fh),
Flags: openFlags(in.Flags), Flags: openFlags(in.Flags),
ReleaseFlags: ReleaseFlags(in.ReleaseFlags), ReleaseFlags: ReleaseFlags(in.ReleaseFlags),
LockOwner: in.LockOwner, LockOwner: in.LockOwner,
} }
case opFsync, opFsyncdir: case fusekernel.OpFsync, fusekernel.OpFsyncdir:
in := (*fsyncIn)(m.data()) in := (*fsyncIn)(m.data())
if m.len() < unsafe.Sizeof(*in) { if m.len() < unsafe.Sizeof(*in) {
goto corrupt goto corrupt
} }
req = &FsyncRequest{ req = &FsyncRequest{
Dir: m.hdr.Opcode == opFsyncdir, Dir: m.hdr.Opcode == fusekernel.OpFsyncdir,
Header: m.Header(), Header: m.Header(),
Handle: HandleID(in.Fh), Handle: HandleID(in.Fh),
Flags: in.FsyncFlags, Flags: in.FsyncFlags,
} }
case opSetxattr: case fusekernel.OpSetxattr:
in := (*setxattrIn)(m.data()) in := (*setxattrIn)(m.data())
if m.len() < unsafe.Sizeof(*in) { if m.len() < unsafe.Sizeof(*in) {
goto corrupt goto corrupt
...@@ -874,7 +874,7 @@ loop: ...@@ -874,7 +874,7 @@ loop:
Xattr: xattr, Xattr: xattr,
} }
case opGetxattr: case fusekernel.OpGetxattr:
in := (*getxattrIn)(m.data()) in := (*getxattrIn)(m.data())
if m.len() < unsafe.Sizeof(*in) { if m.len() < unsafe.Sizeof(*in) {
goto corrupt goto corrupt
...@@ -891,7 +891,7 @@ loop: ...@@ -891,7 +891,7 @@ loop:
Position: in.position(), Position: in.position(),
} }
case opListxattr: case fusekernel.OpListxattr:
in := (*getxattrIn)(m.data()) in := (*getxattrIn)(m.data())
if m.len() < unsafe.Sizeof(*in) { if m.len() < unsafe.Sizeof(*in) {
goto corrupt goto corrupt
...@@ -902,7 +902,7 @@ loop: ...@@ -902,7 +902,7 @@ loop:
Position: in.position(), Position: in.position(),
} }
case opRemovexattr: case fusekernel.OpRemovexattr:
buf := m.bytes() buf := m.bytes()
n := len(buf) n := len(buf)
if n == 0 || buf[n-1] != '\x00' { if n == 0 || buf[n-1] != '\x00' {
...@@ -913,7 +913,7 @@ loop: ...@@ -913,7 +913,7 @@ loop:
Name: string(buf[:n-1]), Name: string(buf[:n-1]),
} }
case opFlush: case fusekernel.OpFlush:
in := (*flushIn)(m.data()) in := (*flushIn)(m.data())
if m.len() < unsafe.Sizeof(*in) { if m.len() < unsafe.Sizeof(*in) {
goto corrupt goto corrupt
...@@ -925,7 +925,7 @@ loop: ...@@ -925,7 +925,7 @@ loop:
LockOwner: in.LockOwner, LockOwner: in.LockOwner,
} }
case opInit: case fusekernel.OpInit:
in := (*initIn)(m.data()) in := (*initIn)(m.data())
if m.len() < unsafe.Sizeof(*in) { if m.len() < unsafe.Sizeof(*in) {
goto corrupt goto corrupt
...@@ -937,14 +937,14 @@ loop: ...@@ -937,14 +937,14 @@ loop:
Flags: fusekernel.InitFlags(in.Flags), Flags: fusekernel.InitFlags(in.Flags),
} }
case opGetlk: case fusekernel.OpGetlk:
panic("opGetlk") panic("fusekernel.OpGetlk")
case opSetlk: case fusekernel.OpSetlk:
panic("opSetlk") panic("fusekernel.OpSetlk")
case opSetlkw: case fusekernel.OpSetlkw:
panic("opSetlkw") panic("fusekernel.OpSetlkw")
case opAccess: case fusekernel.OpAccess:
in := (*accessIn)(m.data()) in := (*accessIn)(m.data())
if m.len() < unsafe.Sizeof(*in) { if m.len() < unsafe.Sizeof(*in) {
goto corrupt goto corrupt
...@@ -954,7 +954,7 @@ loop: ...@@ -954,7 +954,7 @@ loop:
Mask: in.Mask, Mask: in.Mask,
} }
case opCreate: case fusekernel.OpCreate:
size := createInSize(c.proto) size := createInSize(c.proto)
if m.len() < size { if m.len() < size {
goto corrupt goto corrupt
...@@ -976,7 +976,7 @@ loop: ...@@ -976,7 +976,7 @@ loop:
} }
req = r req = r
case opInterrupt: case fusekernel.OpInterrupt:
in := (*interruptIn)(m.data()) in := (*interruptIn)(m.data())
if m.len() < unsafe.Sizeof(*in) { if m.len() < unsafe.Sizeof(*in) {
goto corrupt goto corrupt
...@@ -986,21 +986,21 @@ loop: ...@@ -986,21 +986,21 @@ loop:
IntrID: RequestID(in.Unique), IntrID: RequestID(in.Unique),
} }
case opBmap: case fusekernel.OpBmap:
panic("opBmap") panic("fusekernel.OpBmap")
case opDestroy: case fusekernel.OpDestroy:
req = &DestroyRequest{ req = &DestroyRequest{
Header: m.Header(), Header: m.Header(),
} }
// OS X // OS X
case opSetvolname: case fusekernel.OpSetvolname:
panic("opSetvolname") panic("fusekernel.OpSetvolname")
case opGetxtimes: case fusekernel.OpGetxtimes:
panic("opGetxtimes") panic("fusekernel.OpGetxtimes")
case opExchange: case fusekernel.OpExchange:
panic("opExchange") panic("fusekernel.OpExchange")
} }
return req, nil return req, nil
......
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