]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix nbpipe_test for AIX
authorClément Chigot <chigot.c@gmail.com>
Tue, 29 Oct 2019 14:39:42 +0000 (15:39 +0100)
committerIan Lance Taylor <iant@golang.org>
Wed, 30 Oct 2019 14:51:03 +0000 (14:51 +0000)
Fcntl can't be called using syscall.Syscall as it doesn't work on AIX.
Moreover, fcntl isn't exported by syscall package.

However, it can be accessed by exporting it from runtime package
using export_aix_test.go.

Change-Id: Ib6af66d9d7eacb9ca0525ebc4cd4c92951735f1a
Reviewed-on: https://go-review.googlesource.com/c/go/+/204059
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/runtime/export_aix_test.go [new file with mode: 0644]
src/runtime/nbpipe_fcntl_aix_test.go [new file with mode: 0644]
src/runtime/nbpipe_fcntl_unix_test.go [new file with mode: 0644]
src/runtime/nbpipe_test.go

diff --git a/src/runtime/export_aix_test.go b/src/runtime/export_aix_test.go
new file mode 100644 (file)
index 0000000..162552d
--- /dev/null
@@ -0,0 +1,7 @@
+// Copyright 2019 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package runtime
+
+var Fcntl = syscall_fcntl1
diff --git a/src/runtime/nbpipe_fcntl_aix_test.go b/src/runtime/nbpipe_fcntl_aix_test.go
new file mode 100644 (file)
index 0000000..4276ed5
--- /dev/null
@@ -0,0 +1,17 @@
+// Copyright 2019 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package runtime_test
+
+import (
+       "runtime"
+       "syscall"
+)
+
+// We can't call syscall.Syscall on AIX. Therefore, fcntl is exported from the
+// runtime in export_aix_test.go.
+func fcntl(fd uintptr, cmd int, arg uintptr) (uintptr, syscall.Errno) {
+       res, errno := runtime.Fcntl(fd, uintptr(cmd), arg)
+       return res, syscall.Errno(errno)
+}
diff --git a/src/runtime/nbpipe_fcntl_unix_test.go b/src/runtime/nbpipe_fcntl_unix_test.go
new file mode 100644 (file)
index 0000000..06b3275
--- /dev/null
@@ -0,0 +1,14 @@
+// Copyright 2019 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build darwin dragonfly freebsd linux netbsd openbsd
+
+package runtime_test
+
+import "syscall"
+
+func fcntl(fd uintptr, cmd int, arg uintptr) (uintptr, syscall.Errno) {
+       res, _, err := syscall.Syscall(syscall.SYS_FCNTL, fd, uintptr(cmd), arg)
+       return res, err
+}
index bd0d578234b3bb6a654b0ae69b63a388f3a93daa..00dc11e937b590e724675555024488700ffc68de 100644 (file)
@@ -49,7 +49,7 @@ func checkIsPipe(t *testing.T, r, w int32) {
 
 func checkNonblocking(t *testing.T, fd int32, name string) {
        t.Helper()
-       flags, _, errno := syscall.Syscall(syscall.SYS_FCNTL, uintptr(fd), syscall.F_GETFL, 0)
+       flags, errno := fcntl(uintptr(fd), syscall.F_GETFL, 0)
        if errno != 0 {
                t.Errorf("fcntl(%s, F_GETFL) failed: %v", name, syscall.Errno(errno))
        } else if flags&syscall.O_NONBLOCK == 0 {
@@ -59,7 +59,7 @@ func checkNonblocking(t *testing.T, fd int32, name string) {
 
 func checkCloseonexec(t *testing.T, fd int32, name string) {
        t.Helper()
-       flags, _, errno := syscall.Syscall(syscall.SYS_FCNTL, uintptr(fd), syscall.F_GETFD, 0)
+       flags, errno := fcntl(uintptr(fd), syscall.F_GETFD, 0)
        if errno != 0 {
                t.Errorf("fcntl(%s, F_GETFD) failed: %v", name, syscall.Errno(errno))
        } else if flags&syscall.FD_CLOEXEC == 0 {