]> Cypherpunks.ru repositories - gostls13.git/commitdiff
syscall, os: use pipe2 syscall on NetBSD instead of pipe
authorTobias Klauser <tklauser@distanz.ch>
Wed, 14 Feb 2018 14:56:39 +0000 (14:56 +0000)
committerTobias Klauser <tobias.klauser@gmail.com>
Wed, 14 Feb 2018 15:51:46 +0000 (15:51 +0000)
The pipe2 syscall is part of NetBSD since version 6.0 and thus exists in
all officially supported versions (6.0 through 6.1 and 7.0+).

Follows CL 38426

Change-Id: I7b62b507300c3dfbcc6ae56408a7d7088ddccc77
Reviewed-on: https://go-review.googlesource.com/94035
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Benny Siegert <bsiegert@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/os/pipe2_bsd.go [moved from src/os/pipe_freebsd.go with 95% similarity]
src/os/pipe_bsd.go
src/syscall/forkpipe.go
src/syscall/forkpipe2.go [moved from src/syscall/exec_freebsd.go with 90% similarity]
src/syscall/syscall_netbsd.go
src/syscall/zsyscall_netbsd_386.go
src/syscall/zsyscall_netbsd_amd64.go
src/syscall/zsyscall_netbsd_arm.go

similarity index 95%
rename from src/os/pipe_freebsd.go
rename to src/os/pipe2_bsd.go
index 93bd869afd4f3f294c38e10744cd8716a5f380fe..1615067b4125b73f6ee9a33719f188786960353a 100644 (file)
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build freebsd netbsd
+
 package os
 
 import "syscall"
index d16c2a6c0b7a4b3bbbb3d62634e813b52dc1f04e..04eaf83791364761cc1b0ba3d6d044e786cf4b74 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly nacl netbsd openbsd solaris
+// +build darwin dragonfly nacl openbsd solaris
 
 package os
 
index fa799eb5b9321e764edd0fd78404e9a19b673e59..5d9eb4d5f220e71944211dc549a3f68d5c912451 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly netbsd openbsd solaris
+// +build darwin dragonfly openbsd solaris
 
 package syscall
 
similarity index 90%
rename from src/syscall/exec_freebsd.go
rename to src/syscall/forkpipe2.go
index 1654b4ba2a64b7db9e49cd38982af59653701ecc..2bf4757133cdc4dcd8f5a9bfb03330a4a18d660b 100644 (file)
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build freebsd netbsd
+
 package syscall
 
 func forkExecPipe(p []int) error {
index d9eddc18cfdb2cdda6d45673c740c8f90f776ca3..90837e01f95d6afa72e4b846912ca586c6896179 100644 (file)
@@ -102,13 +102,20 @@ func direntNamlen(buf []byte) (uint64, bool) {
        return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
 }
 
-//sysnb pipe() (fd1 int, fd2 int, err error)
 func Pipe(p []int) (err error) {
+       return Pipe2(p, 0)
+}
+
+//sysnb pipe2(p *[2]_C_int, flags int) (err error)
+func Pipe2(p []int, flags int) error {
        if len(p) != 2 {
                return EINVAL
        }
-       p[0], p[1], err = pipe()
-       return
+       var pp [2]_C_int
+       err := pipe2(&pp, flags)
+       p[0] = int(pp[0])
+       p[1] = int(pp[1])
+       return err
 }
 
 //sys getdents(fd int, buf []byte) (n int, err error)
index 91024659481ccacd57386e3776207c4d39ffa9be..156292a84ecb4daf4b3cbf758b46369b85771842 100644 (file)
@@ -261,10 +261,8 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func pipe() (fd1 int, fd2 int, err error) {
-       r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
-       fd1 = int(r0)
-       fd2 = int(r1)
+func pipe2(p *[2]_C_int, flags int) (err error) {
+       _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
        if e1 != 0 {
                err = errnoErr(e1)
        }
index f4a46c19a2e4fe8e5ad595bfb99e5aacb2bc4c54..1af62b715e1564f4275332862123e5a9f78f6f2c 100644 (file)
@@ -261,10 +261,8 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func pipe() (fd1 int, fd2 int, err error) {
-       r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
-       fd1 = int(r0)
-       fd2 = int(r1)
+func pipe2(p *[2]_C_int, flags int) (err error) {
+       _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
        if e1 != 0 {
                err = errnoErr(e1)
        }
index b07e7775c13bb3ba762c6fa1b826aa3b52ce7fde..b03b19169e2f699086e31d6d7791ff5fef22e59d 100644 (file)
@@ -261,10 +261,8 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func pipe() (fd1 int, fd2 int, err error) {
-       r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
-       fd1 = int(r0)
-       fd2 = int(r1)
+func pipe2(p *[2]_C_int, flags int) (err error) {
+       _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
        if e1 != 0 {
                err = errnoErr(e1)
        }