1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
//go:build !windows
// +build !windows
package localfs
import (
"os"
"syscall"
"github.com/hugelgupf/p9/p9"
"golang.org/x/sys/unix"
)
func umask(mask int) int {
return syscall.Umask(mask)
}
func localToQid(_ string, fi os.FileInfo) (uint64, error) {
return uint64(fi.Sys().(*syscall.Stat_t).Ino), nil
}
// lock implements p9.File.Lock.
func (l *Local) lock(pid int, locktype p9.LockType, flags p9.LockFlags, start, length uint64, client string) (p9.LockStatus, error) {
switch locktype {
case p9.ReadLock, p9.WriteLock:
if err := unix.Flock(int(l.file.Fd()), unix.LOCK_EX); err != nil {
return p9.LockStatusError, nil
}
case p9.Unlock:
if err := unix.Flock(int(l.file.Fd()), unix.LOCK_EX); err != nil {
return p9.LockStatusError, nil
}
default:
return p9.LockStatusOK, unix.ENOSYS
}
return p9.LockStatusOK, nil
}
|