Don't depend on fuseshim.FileMode.
parent
c69cd3b527
commit
876746fcd2
|
@ -25,7 +25,6 @@ import (
|
||||||
|
|
||||||
"github.com/jacobsa/fuse/internal/buffer"
|
"github.com/jacobsa/fuse/internal/buffer"
|
||||||
"github.com/jacobsa/fuse/internal/fusekernel"
|
"github.com/jacobsa/fuse/internal/fusekernel"
|
||||||
"github.com/jacobsa/fuse/internal/fuseshim"
|
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -92,7 +91,7 @@ func Convert(
|
||||||
}
|
}
|
||||||
|
|
||||||
if valid&fusekernel.SetattrMode != 0 {
|
if valid&fusekernel.SetattrMode != 0 {
|
||||||
mode := fuseshim.FileMode(in.Mode)
|
mode := convertFileMode(in.Mode)
|
||||||
to.Mode = &mode
|
to.Mode = &mode
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,7 +149,7 @@ func Convert(
|
||||||
// the fact that this is a directory is implicit in the fact that the
|
// the fact that this is a directory is implicit in the fact that the
|
||||||
// opcode is mkdir. But we want the correct mode to go through, so ensure
|
// opcode is mkdir. But we want the correct mode to go through, so ensure
|
||||||
// that os.ModeDir is set.
|
// that os.ModeDir is set.
|
||||||
Mode: fuseshim.FileMode(in.Mode) | os.ModeDir,
|
Mode: convertFileMode(in.Mode) | os.ModeDir,
|
||||||
}
|
}
|
||||||
|
|
||||||
io = to
|
io = to
|
||||||
|
@ -175,7 +174,7 @@ func Convert(
|
||||||
protocol: protocol,
|
protocol: protocol,
|
||||||
Parent: InodeID(m.Header().Nodeid),
|
Parent: InodeID(m.Header().Nodeid),
|
||||||
Name: string(name),
|
Name: string(name),
|
||||||
Mode: fuseshim.FileMode(in.Mode),
|
Mode: convertFileMode(in.Mode),
|
||||||
}
|
}
|
||||||
io = to
|
io = to
|
||||||
co = &to.commonOp
|
co = &to.commonOp
|
||||||
|
@ -509,3 +508,33 @@ func convertChildInodeEntry(
|
||||||
|
|
||||||
convertAttributes(in.Child, &in.Attributes, &out.Attr)
|
convertAttributes(in.Child, &in.Attributes, &out.Attr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func convertFileMode(unixMode uint32) os.FileMode {
|
||||||
|
mode := os.FileMode(unixMode & 0777)
|
||||||
|
switch unixMode & syscall.S_IFMT {
|
||||||
|
case syscall.S_IFREG:
|
||||||
|
// nothing
|
||||||
|
case syscall.S_IFDIR:
|
||||||
|
mode |= os.ModeDir
|
||||||
|
case syscall.S_IFCHR:
|
||||||
|
mode |= os.ModeCharDevice | os.ModeDevice
|
||||||
|
case syscall.S_IFBLK:
|
||||||
|
mode |= os.ModeDevice
|
||||||
|
case syscall.S_IFIFO:
|
||||||
|
mode |= os.ModeNamedPipe
|
||||||
|
case syscall.S_IFLNK:
|
||||||
|
mode |= os.ModeSymlink
|
||||||
|
case syscall.S_IFSOCK:
|
||||||
|
mode |= os.ModeSocket
|
||||||
|
default:
|
||||||
|
// no idea
|
||||||
|
mode |= os.ModeDevice
|
||||||
|
}
|
||||||
|
if unixMode&syscall.S_ISUID != 0 {
|
||||||
|
mode |= os.ModeSetuid
|
||||||
|
}
|
||||||
|
if unixMode&syscall.S_ISGID != 0 {
|
||||||
|
mode |= os.ModeSetgid
|
||||||
|
}
|
||||||
|
return mode
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue