Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jacobsa-fuse
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
jacobsa-fuse
Commits
bd41a4e7
Commit
bd41a4e7
authored
Jul 23, 2015
by
Aaron Jacobs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed more build errors.
parent
4dd9732c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
100 additions
and
96 deletions
+100
-96
internal/fusekernel/fuse_kernel.go
internal/fusekernel/fuse_kernel.go
+43
-43
internal/fuseshim/buffer.go
internal/fuseshim/buffer.go
+7
-3
internal/fuseshim/fuse.go
internal/fuseshim/fuse.go
+50
-50
No files found.
internal/fusekernel/fuse_kernel.go
View file @
bd41a4e7
...
...
@@ -342,49 +342,49 @@ var releaseFlagNames = []flagName{
// Opcodes
const
(
o
pLookup
=
1
o
pForget
=
2
// no reply
o
pGetattr
=
3
o
pSetattr
=
4
o
pReadlink
=
5
o
pSymlink
=
6
o
pMknod
=
8
o
pMkdir
=
9
o
pUnlink
=
10
o
pRmdir
=
11
o
pRename
=
12
o
pLink
=
13
o
pOpen
=
14
o
pRead
=
15
o
pWrite
=
16
o
pStatfs
=
17
o
pRelease
=
18
o
pFsync
=
20
o
pSetxattr
=
21
o
pGetxattr
=
22
o
pListxattr
=
23
o
pRemovexattr
=
24
o
pFlush
=
25
o
pInit
=
26
o
pOpendir
=
27
o
pReaddir
=
28
o
pReleasedir
=
29
o
pFsyncdir
=
30
o
pGetlk
=
31
o
pSetlk
=
32
o
pSetlkw
=
33
o
pAccess
=
34
o
pCreate
=
35
o
pInterrupt
=
36
o
pBmap
=
37
o
pDestroy
=
38
o
pIoctl
=
39
// Linux?
o
pPoll
=
40
// Linux?
O
pLookup
=
1
O
pForget
=
2
// no reply
O
pGetattr
=
3
O
pSetattr
=
4
O
pReadlink
=
5
O
pSymlink
=
6
O
pMknod
=
8
O
pMkdir
=
9
O
pUnlink
=
10
O
pRmdir
=
11
O
pRename
=
12
O
pLink
=
13
O
pOpen
=
14
O
pRead
=
15
O
pWrite
=
16
O
pStatfs
=
17
O
pRelease
=
18
O
pFsync
=
20
O
pSetxattr
=
21
O
pGetxattr
=
22
O
pListxattr
=
23
O
pRemovexattr
=
24
O
pFlush
=
25
O
pInit
=
26
O
pOpendir
=
27
O
pReaddir
=
28
O
pReleasedir
=
29
O
pFsyncdir
=
30
O
pGetlk
=
31
O
pSetlk
=
32
O
pSetlkw
=
33
O
pAccess
=
34
O
pCreate
=
35
O
pInterrupt
=
36
O
pBmap
=
37
O
pDestroy
=
38
O
pIoctl
=
39
// Linux?
O
pPoll
=
40
// Linux?
// OS X
o
pSetvolname
=
61
o
pGetxtimes
=
62
o
pExchange
=
63
O
pSetvolname
=
61
O
pGetxtimes
=
62
O
pExchange
=
63
)
type
entryOut
struct
{
...
...
@@ -693,7 +693,7 @@ type initIn struct {
Flags
uint32
}
const
i
nitInSize
=
int
(
unsafe
.
Sizeof
(
initIn
{}))
const
I
nitInSize
=
int
(
unsafe
.
Sizeof
(
initIn
{}))
type
initOut
struct
{
Major
uint32
...
...
@@ -729,7 +729,7 @@ type InHeader struct {
Padding
uint32
}
const
i
nHeaderSize
=
int
(
unsafe
.
Sizeof
(
InHeader
{}))
const
I
nHeaderSize
=
int
(
unsafe
.
Sizeof
(
InHeader
{}))
type
OutHeader
struct
{
Len
uint32
...
...
internal/fuseshim/buffer.go
View file @
bd41a4e7
package
bazilfuse
package
fuseshim
import
"unsafe"
import
(
"unsafe"
"github.com/jacobsa/fuse/internal/fusekernel"
)
// buffer provides a mechanism for constructing a message from
// multiple segments.
...
...
@@ -29,7 +33,7 @@ func (w *buffer) reset() {
}
func
newBuffer
(
extra
uintptr
)
buffer
{
const
hdrSize
=
unsafe
.
Sizeof
(
o
utHeader
{})
const
hdrSize
=
unsafe
.
Sizeof
(
fusekernel
.
O
utHeader
{})
buf
:=
make
(
buffer
,
hdrSize
,
hdrSize
+
extra
)
return
buf
}
internal/fuseshim/fuse.go
View file @
bd41a4e7
...
...
@@ -549,19 +549,19 @@ loop:
}
m
.
buf
=
m
.
buf
[
:
n
]
if
n
<
i
nHeaderSize
{
if
n
<
fusekernel
.
I
nHeaderSize
{
putMessage
(
m
)
return
nil
,
errors
.
New
(
"fuse: message too short"
)
}
// FreeBSD FUSE sends a short length in the header
// for FUSE_INIT even though the actual read length is correct.
if
n
==
inHeaderSize
+
initInSize
&&
m
.
hdr
.
Opcode
==
o
pInit
&&
m
.
hdr
.
Len
<
uint32
(
n
)
{
if
n
==
fusekernel
.
InHeaderSize
+
fusekernel
.
InitInSize
&&
m
.
hdr
.
Opcode
==
fusekernel
.
O
pInit
&&
m
.
hdr
.
Len
<
uint32
(
n
)
{
m
.
hdr
.
Len
=
uint32
(
n
)
}
// 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
==
o
pWrite
{
if
m
.
hdr
.
Len
<
uint32
(
n
)
&&
m
.
hdr
.
Len
>=
uint32
(
unsafe
.
Sizeof
(
writeIn
{}))
&&
m
.
hdr
.
Opcode
==
fusekernel
.
O
pWrite
{
m
.
hdr
.
Len
=
uint32
(
n
)
}
...
...
@@ -572,7 +572,7 @@ loop:
return
nil
,
err
}
m
.
off
=
i
nHeaderSize
m
.
off
=
fusekernel
.
I
nHeaderSize
// Convert to data structures.
// Do not trust kernel to hand us well-formed data.
...
...
@@ -582,7 +582,7 @@ loop:
Debug
(
noOpcode
{
Opcode
:
m
.
hdr
.
Opcode
})
goto
unrecognized
case
o
pLookup
:
case
fusekernel
.
O
pLookup
:
buf
:=
m
.
bytes
()
n
:=
len
(
buf
)
if
n
==
0
||
buf
[
n
-
1
]
!=
'\x00'
{
...
...
@@ -593,7 +593,7 @@ loop:
Name
:
string
(
buf
[
:
n
-
1
]),
}
case
o
pForget
:
case
fusekernel
.
O
pForget
:
in
:=
(
*
forgetIn
)(
m
.
data
())
if
m
.
len
()
<
unsafe
.
Sizeof
(
*
in
)
{
goto
corrupt
...
...
@@ -603,7 +603,7 @@ loop:
N
:
in
.
Nlookup
,
}
case
o
pGetattr
:
case
fusekernel
.
O
pGetattr
:
switch
{
case
c
.
proto
.
LT
(
fusekernel
.
Protocol
{
7
,
9
})
:
req
=
&
GetattrRequest
{
...
...
@@ -622,7 +622,7 @@ loop:
}
}
case
o
pSetattr
:
case
fusekernel
.
O
pSetattr
:
in
:=
(
*
setattrIn
)(
m
.
data
())
if
m
.
len
()
<
unsafe
.
Sizeof
(
*
in
)
{
goto
corrupt
...
...
@@ -642,7 +642,7 @@ loop:
Flags
:
in
.
Flags
(),
}
case
o
pReadlink
:
case
fusekernel
.
O
pReadlink
:
if
len
(
m
.
bytes
())
>
0
{
goto
corrupt
}
...
...
@@ -650,7 +650,7 @@ loop:
Header
:
m
.
Header
(),
}
case
o
pSymlink
:
case
fusekernel
.
O
pSymlink
:
// m.bytes() is "newName\0target\0"
names
:=
m
.
bytes
()
if
len
(
names
)
==
0
||
names
[
len
(
names
)
-
1
]
!=
0
{
...
...
@@ -667,7 +667,7 @@ loop:
Target
:
string
(
target
),
}
case
o
pLink
:
case
fusekernel
.
O
pLink
:
in
:=
(
*
linkIn
)(
m
.
data
())
if
m
.
len
()
<
unsafe
.
Sizeof
(
*
in
)
{
goto
corrupt
...
...
@@ -683,7 +683,7 @@ loop:
NewName
:
string
(
newName
),
}
case
o
pMknod
:
case
fusekernel
.
O
pMknod
:
size
:=
mknodInSize
(
c
.
proto
)
if
m
.
len
()
<
size
{
goto
corrupt
...
...
@@ -705,7 +705,7 @@ loop:
}
req
=
r
case
o
pMkdir
:
case
fusekernel
.
O
pMkdir
:
size
:=
mkdirInSize
(
c
.
proto
)
if
m
.
len
()
<
size
{
goto
corrupt
...
...
@@ -729,7 +729,7 @@ loop:
}
req
=
r
case
opUnlink
,
o
pRmdir
:
case
fusekernel
.
OpUnlink
,
fusekernel
.
O
pRmdir
:
buf
:=
m
.
bytes
()
n
:=
len
(
buf
)
if
n
==
0
||
buf
[
n
-
1
]
!=
'\x00'
{
...
...
@@ -738,10 +738,10 @@ loop:
req
=
&
RemoveRequest
{
Header
:
m
.
Header
(),
Name
:
string
(
buf
[
:
n
-
1
]),
Dir
:
m
.
hdr
.
Opcode
==
o
pRmdir
,
Dir
:
m
.
hdr
.
Opcode
==
fusekernel
.
O
pRmdir
,
}
case
o
pRename
:
case
fusekernel
.
O
pRename
:
in
:=
(
*
renameIn
)(
m
.
data
())
if
m
.
len
()
<
unsafe
.
Sizeof
(
*
in
)
{
goto
corrupt
...
...
@@ -767,25 +767,25 @@ loop:
NewName
:
newName
,
}
case
opOpendir
,
o
pOpen
:
case
fusekernel
.
OpOpendir
,
fusekernel
.
O
pOpen
:
in
:=
(
*
openIn
)(
m
.
data
())
if
m
.
len
()
<
unsafe
.
Sizeof
(
*
in
)
{
goto
corrupt
}
req
=
&
OpenRequest
{
Header
:
m
.
Header
(),
Dir
:
m
.
hdr
.
Opcode
==
o
pOpendir
,
Dir
:
m
.
hdr
.
Opcode
==
fusekernel
.
O
pOpendir
,
Flags
:
openFlags
(
in
.
Flags
),
}
case
opRead
,
o
pReaddir
:
case
fusekernel
.
OpRead
,
fusekernel
.
O
pReaddir
:
in
:=
(
*
readIn
)(
m
.
data
())
if
m
.
len
()
<
readInSize
(
c
.
proto
)
{
goto
corrupt
}
r
:=
&
ReadRequest
{
Header
:
m
.
Header
(),
Dir
:
m
.
hdr
.
Opcode
==
o
pReaddir
,
Dir
:
m
.
hdr
.
Opcode
==
fusekernel
.
O
pReaddir
,
Handle
:
HandleID
(
in
.
Fh
),
Offset
:
int64
(
in
.
Offset
),
Size
:
int
(
in
.
Size
),
...
...
@@ -797,7 +797,7 @@ loop:
}
req
=
r
case
o
pWrite
:
case
fusekernel
.
O
pWrite
:
in
:=
(
*
writeIn
)(
m
.
data
())
if
m
.
len
()
<
writeInSize
(
c
.
proto
)
{
goto
corrupt
...
...
@@ -819,38 +819,38 @@ loop:
r
.
Data
=
buf
req
=
r
case
o
pStatfs
:
case
fusekernel
.
O
pStatfs
:
req
=
&
StatfsRequest
{
Header
:
m
.
Header
(),
}
case
opRelease
,
o
pReleasedir
:
case
fusekernel
.
OpRelease
,
fusekernel
.
O
pReleasedir
:
in
:=
(
*
releaseIn
)(
m
.
data
())
if
m
.
len
()
<
unsafe
.
Sizeof
(
*
in
)
{
goto
corrupt
}
req
=
&
ReleaseRequest
{
Header
:
m
.
Header
(),
Dir
:
m
.
hdr
.
Opcode
==
o
pReleasedir
,
Dir
:
m
.
hdr
.
Opcode
==
fusekernel
.
O
pReleasedir
,
Handle
:
HandleID
(
in
.
Fh
),
Flags
:
openFlags
(
in
.
Flags
),
ReleaseFlags
:
ReleaseFlags
(
in
.
ReleaseFlags
),
LockOwner
:
in
.
LockOwner
,
}
case
opFsync
,
o
pFsyncdir
:
case
fusekernel
.
OpFsync
,
fusekernel
.
O
pFsyncdir
:
in
:=
(
*
fsyncIn
)(
m
.
data
())
if
m
.
len
()
<
unsafe
.
Sizeof
(
*
in
)
{
goto
corrupt
}
req
=
&
FsyncRequest
{
Dir
:
m
.
hdr
.
Opcode
==
o
pFsyncdir
,
Dir
:
m
.
hdr
.
Opcode
==
fusekernel
.
O
pFsyncdir
,
Header
:
m
.
Header
(),
Handle
:
HandleID
(
in
.
Fh
),
Flags
:
in
.
FsyncFlags
,
}
case
o
pSetxattr
:
case
fusekernel
.
O
pSetxattr
:
in
:=
(
*
setxattrIn
)(
m
.
data
())
if
m
.
len
()
<
unsafe
.
Sizeof
(
*
in
)
{
goto
corrupt
...
...
@@ -874,7 +874,7 @@ loop:
Xattr
:
xattr
,
}
case
o
pGetxattr
:
case
fusekernel
.
O
pGetxattr
:
in
:=
(
*
getxattrIn
)(
m
.
data
())
if
m
.
len
()
<
unsafe
.
Sizeof
(
*
in
)
{
goto
corrupt
...
...
@@ -891,7 +891,7 @@ loop:
Position
:
in
.
position
(),
}
case
o
pListxattr
:
case
fusekernel
.
O
pListxattr
:
in
:=
(
*
getxattrIn
)(
m
.
data
())
if
m
.
len
()
<
unsafe
.
Sizeof
(
*
in
)
{
goto
corrupt
...
...
@@ -902,7 +902,7 @@ loop:
Position
:
in
.
position
(),
}
case
o
pRemovexattr
:
case
fusekernel
.
O
pRemovexattr
:
buf
:=
m
.
bytes
()
n
:=
len
(
buf
)
if
n
==
0
||
buf
[
n
-
1
]
!=
'\x00'
{
...
...
@@ -913,7 +913,7 @@ loop:
Name
:
string
(
buf
[
:
n
-
1
]),
}
case
o
pFlush
:
case
fusekernel
.
O
pFlush
:
in
:=
(
*
flushIn
)(
m
.
data
())
if
m
.
len
()
<
unsafe
.
Sizeof
(
*
in
)
{
goto
corrupt
...
...
@@ -925,7 +925,7 @@ loop:
LockOwner
:
in
.
LockOwner
,
}
case
o
pInit
:
case
fusekernel
.
O
pInit
:
in
:=
(
*
initIn
)(
m
.
data
())
if
m
.
len
()
<
unsafe
.
Sizeof
(
*
in
)
{
goto
corrupt
...
...
@@ -937,14 +937,14 @@ loop:
Flags
:
fusekernel
.
InitFlags
(
in
.
Flags
),
}
case
o
pGetlk
:
panic
(
"
o
pGetlk"
)
case
o
pSetlk
:
panic
(
"
o
pSetlk"
)
case
o
pSetlkw
:
panic
(
"
o
pSetlkw"
)
case
fusekernel
.
O
pGetlk
:
panic
(
"
fusekernel.O
pGetlk"
)
case
fusekernel
.
O
pSetlk
:
panic
(
"
fusekernel.O
pSetlk"
)
case
fusekernel
.
O
pSetlkw
:
panic
(
"
fusekernel.O
pSetlkw"
)
case
o
pAccess
:
case
fusekernel
.
O
pAccess
:
in
:=
(
*
accessIn
)(
m
.
data
())
if
m
.
len
()
<
unsafe
.
Sizeof
(
*
in
)
{
goto
corrupt
...
...
@@ -954,7 +954,7 @@ loop:
Mask
:
in
.
Mask
,
}
case
o
pCreate
:
case
fusekernel
.
O
pCreate
:
size
:=
createInSize
(
c
.
proto
)
if
m
.
len
()
<
size
{
goto
corrupt
...
...
@@ -976,7 +976,7 @@ loop:
}
req
=
r
case
o
pInterrupt
:
case
fusekernel
.
O
pInterrupt
:
in
:=
(
*
interruptIn
)(
m
.
data
())
if
m
.
len
()
<
unsafe
.
Sizeof
(
*
in
)
{
goto
corrupt
...
...
@@ -986,21 +986,21 @@ loop:
IntrID
:
RequestID
(
in
.
Unique
),
}
case
o
pBmap
:
panic
(
"
o
pBmap"
)
case
fusekernel
.
O
pBmap
:
panic
(
"
fusekernel.O
pBmap"
)
case
o
pDestroy
:
case
fusekernel
.
O
pDestroy
:
req
=
&
DestroyRequest
{
Header
:
m
.
Header
(),
}
// OS X
case
o
pSetvolname
:
panic
(
"
o
pSetvolname"
)
case
o
pGetxtimes
:
panic
(
"
o
pGetxtimes"
)
case
o
pExchange
:
panic
(
"
o
pExchange"
)
case
fusekernel
.
O
pSetvolname
:
panic
(
"
fusekernel.O
pSetvolname"
)
case
fusekernel
.
O
pGetxtimes
:
panic
(
"
fusekernel.O
pGetxtimes"
)
case
fusekernel
.
O
pExchange
:
panic
(
"
fusekernel.O
pExchange"
)
}
return
req
,
nil
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment