]>
Commit | Line | Data |
---|---|---|
15c0b25d AP |
1 | // Copyright 2014 The Go Authors. All rights reserved. |
2 | // Use of this source code is governed by a BSD-style | |
3 | // license that can be found in the LICENSE file. | |
4 | ||
107c1cdb | 5 | // +build dragonfly freebsd linux netbsd openbsd |
15c0b25d AP |
6 | |
7 | package unix | |
8 | ||
9 | import "unsafe" | |
10 | ||
11 | // fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux | |
12 | // systems by flock_linux_32bit.go to be SYS_FCNTL64. | |
13 | var fcntl64Syscall uintptr = SYS_FCNTL | |
14 | ||
15 | // FcntlInt performs a fcntl syscall on fd with the provided command and argument. | |
16 | func FcntlInt(fd uintptr, cmd, arg int) (int, error) { | |
17 | valptr, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(arg)) | |
18 | var err error | |
19 | if errno != 0 { | |
20 | err = errno | |
21 | } | |
22 | return int(valptr), err | |
23 | } | |
24 | ||
25 | // FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. | |
26 | func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { | |
27 | _, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(unsafe.Pointer(lk))) | |
28 | if errno == 0 { | |
29 | return nil | |
30 | } | |
31 | return errno | |
32 | } |