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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
package fs_test
import (
"io"
"os"
"syscall"
"golang.org/x/sys/unix"
)
func platformStatfs(st *syscall.Statfs_t) *statfsResult {
return &statfsResult{
Blocks: st.Blocks,
Bfree: st.Bfree,
Bavail: st.Bavail,
Files: st.Files,
Ffree: st.Ffree,
Bsize: int64(st.Bsize),
Namelen: int64(st.Namelen),
Frsize: int64(st.Frsize),
}
}
func platformStat(fi os.FileInfo) *statResult {
r := &statResult{
Mode: fi.Mode(),
}
st := fi.Sys().(*syscall.Stat_t)
r.Ino = st.Ino
r.Nlink = uint64(st.Nlink)
r.UID = st.Uid
r.GID = st.Gid
r.Blksize = int64(st.Blksize)
return r
}
var _lockOFDHelper = helpers.Register("lock-ofd", &lockHelp{
lockFn: func(fd uintptr, req *lockReq) error {
lk := unix.Flock_t{
Type: unix.F_WRLCK,
Whence: int16(io.SeekStart),
Start: req.Start,
Len: req.Len,
}
cmd := unix.F_OFD_SETLK
if req.Wait {
cmd = unix.F_OFD_SETLKW
}
return unix.FcntlFlock(fd, cmd, &lk)
},
unlockFn: func(fd uintptr, req *lockReq) error {
lk := unix.Flock_t{
Type: unix.F_UNLCK,
Whence: int16(io.SeekStart),
Start: req.Start,
Len: req.Len,
}
cmd := unix.F_OFD_SETLK
if req.Wait {
cmd = unix.F_OFD_SETLKW
}
return unix.FcntlFlock(fd, cmd, &lk)
},
queryFn: func(fd uintptr, lk *unix.Flock_t) error {
cmd := unix.F_OFD_GETLK
return unix.FcntlFlock(fd, cmd, lk)
},
})
func init() {
lockOFDHelper = _lockOFDHelper
}
|