Commit 699aa37d authored by Mikio Hara's avatar Mikio Hara

syscall: add fcntl test

Also updates documentation.

LGTM=minux.ma
R=iant, bradfitz, nightlyone, minux.ma
CC=golang-codereviews
https://golang.org/cl/58660044
parent fe330cf5
...@@ -4,9 +4,6 @@ ...@@ -4,9 +4,6 @@
// +build freebsd dragonfly darwin linux netbsd openbsd // +build freebsd dragonfly darwin linux netbsd openbsd
// This file tests that some basic syscalls are consistent across
// all Unixes.
package syscall_test package syscall_test
import ( import (
...@@ -16,14 +13,17 @@ import ( ...@@ -16,14 +13,17 @@ import (
"net" "net"
"os" "os"
"os/exec" "os/exec"
"path/filepath"
"runtime" "runtime"
"syscall" "syscall"
"testing" "testing"
"time" "time"
) )
// {Set,Get}priority and needed constants for them // Tests that below functions, structures and constants are consistent
// on all Unix-like systems.
func _() { func _() {
// program scheduling priority functions and constants
var ( var (
_ func(int, int, int) error = syscall.Setpriority _ func(int, int, int) error = syscall.Setpriority
_ func(int, int) (int, error) = syscall.Getpriority _ func(int, int) (int, error) = syscall.Getpriority
...@@ -33,18 +33,16 @@ func _() { ...@@ -33,18 +33,16 @@ func _() {
_ int = syscall.PRIO_PROCESS _ int = syscall.PRIO_PROCESS
_ int = syscall.PRIO_PGRP _ int = syscall.PRIO_PGRP
) )
}
// termios functions and constants // termios constants
func _() {
const ( const (
_ int = syscall.TCIFLUSH _ int = syscall.TCIFLUSH
_ int = syscall.TCIOFLUSH _ int = syscall.TCIOFLUSH
_ int = syscall.TCOFLUSH _ int = syscall.TCOFLUSH
) )
}
func _() { // fcntl file locking structure and constants
var (
_ = syscall.Flock_t{ _ = syscall.Flock_t{
Type: int16(0), Type: int16(0),
Whence: int16(0), Whence: int16(0),
...@@ -52,6 +50,31 @@ func _() { ...@@ -52,6 +50,31 @@ func _() {
Len: int64(0), Len: int64(0),
Pid: int32(0), Pid: int32(0),
} }
)
const (
_ = syscall.F_GETLK
_ = syscall.F_SETLK
_ = syscall.F_SETLKW
)
}
// TestFcntlFlock tests whether the file locking structure matches
// the calling convention of each kernel.
func TestFcntlFlock(t *testing.T) {
name := filepath.Join(os.TempDir(), "TestFcntlFlock")
fd, err := syscall.Open(name, syscall.O_CREAT|syscall.O_RDWR|syscall.O_CLOEXEC, 0)
if err != nil {
t.Fatalf("Open failed: %v", err)
}
defer syscall.Unlink(name)
defer syscall.Close(fd)
flock := syscall.Flock_t{
Type: syscall.F_RDLCK,
Start: 0, Len: 0, Whence: 1,
}
if err := syscall.FcntlFlock(uintptr(fd), syscall.F_GETLK, &flock); err != nil {
t.Fatalf("FcntlFlock failed: %v", err)
}
} }
// TestPassFD tests passing a file descriptor over a Unix socket. // TestPassFD tests passing a file descriptor over a Unix socket.
......
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