Commit fe6272cc by Ian Lance Taylor

syscall: emulate Flock on AIX

    
    Reviewed-on: https://go-review.googlesource.com/79095

From-SVN: r255737
parent dead5b99
c02de8ca63f52a2475ce8645edee3203a3c908ac d1f90c9b77baca5c33a398ab844fb4440c6a5ee7
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -111,6 +111,28 @@ func Reboot(how int) (err error) { ...@@ -111,6 +111,28 @@ func Reboot(how int) (err error) {
//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) //sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//fchownat(dirfd _C_int, path *byte, owner Uid_t, group Gid_t, flags _C_int) _C_int //fchownat(dirfd _C_int, path *byte, owner Uid_t, group Gid_t, flags _C_int) _C_int
// On AIX, there is no flock() system call, we emulate it.
func Flock(fd int, op int) (err error) {
lk := &Flock_t{}
if (op & LOCK_UN) != 0 {
lk.Type = F_UNLCK
} else if (op & LOCK_EX) != 0 {
lk.Type = F_WRLCK
} else if (op & LOCK_SH) != 0 {
lk.Type = F_RDLCK
} else {
return nil
}
if (op & LOCK_NB) != 0 {
err = FcntlFlock(uintptr(fd), F_SETLK, lk)
if err != nil && (err == EAGAIN || err == EACCES) {
return EWOULDBLOCK
}
return err
}
return FcntlFlock(uintptr(fd), F_SETLKW, lk)
}
//sys Fstatfs(fd int, buf *Statfs_t) (err error) //sys Fstatfs(fd int, buf *Statfs_t) (err error)
//fstatfs64(fd _C_int, buf *Statfs_t) _C_int //fstatfs64(fd _C_int, buf *Statfs_t) _C_int
......
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