From e6c15945dee0661dee6111183d4951853c4c2d98 Mon Sep 17 00:00:00 2001 From: Tobias Klauser <tklauser@distanz.ch> Date: Thu, 23 Aug 2018 16:33:53 +0200 Subject: [PATCH] syscall, os: use pipe2 syscall on DragonflyBSD instead of pipe Follow the implementation used by the other BSDs ith os.Pipe and syscall.forkExecPipe consisting of a single syscall instead of three. Change-Id: I602187672f244cbd8faaa3397904d71d15452d9f Reviewed-on: https://go-review.googlesource.com/130996 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> --- src/os/pipe2_bsd.go | 2 +- src/os/pipe_bsd.go | 2 +- src/syscall/forkpipe.go | 2 +- src/syscall/forkpipe2.go | 2 +- src/syscall/syscall_dragonfly.go | 10 +++++++--- src/syscall/zsyscall_dragonfly_amd64.go | 4 ++-- src/syscall/zsysnum_dragonfly_amd64.go | 1 + 7 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/os/pipe2_bsd.go b/src/os/pipe2_bsd.go index 0ef894b476..7d2d9e8ffd 100644 --- a/src/os/pipe2_bsd.go +++ b/src/os/pipe2_bsd.go @@ -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 freebsd netbsd openbsd +// +build dragonfly freebsd netbsd openbsd package os diff --git a/src/os/pipe_bsd.go b/src/os/pipe_bsd.go index 9735988f32..6fd10dbc1a 100644 --- a/src/os/pipe_bsd.go +++ b/src/os/pipe_bsd.go @@ -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 js,wasm nacl solaris +// +build darwin js,wasm nacl solaris package os diff --git a/src/syscall/forkpipe.go b/src/syscall/forkpipe.go index 71890a29ba..55777497b1 100644 --- a/src/syscall/forkpipe.go +++ b/src/syscall/forkpipe.go @@ -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 solaris +// +build darwin solaris package syscall diff --git a/src/syscall/forkpipe2.go b/src/syscall/forkpipe2.go index c9a0c4996e..0078f4bbab 100644 --- a/src/syscall/forkpipe2.go +++ b/src/syscall/forkpipe2.go @@ -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 freebsd netbsd openbsd +// +build dragonfly freebsd netbsd openbsd package syscall diff --git a/src/syscall/syscall_dragonfly.go b/src/syscall/syscall_dragonfly.go index 3dbbe342cf..d59f139446 100644 --- a/src/syscall/syscall_dragonfly.go +++ b/src/syscall/syscall_dragonfly.go @@ -72,13 +72,17 @@ func direntNamlen(buf []byte) (uint64, bool) { return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) } -//sysnb pipe() (r int, w int, err error) +func Pipe(p []int) error { + return Pipe2(p, 0) +} + +//sysnb pipe2(flags int) (r int, w int, err error) -func Pipe(p []int) (err error) { +func Pipe2(p []int, flags int) (err error) { if len(p) != 2 { return EINVAL } - p[0], p[1], err = pipe() + p[0], p[1], err = pipe2(flags) return } diff --git a/src/syscall/zsyscall_dragonfly_amd64.go b/src/syscall/zsyscall_dragonfly_amd64.go index 578b5a3e9e..f9ed33aae8 100644 --- a/src/syscall/zsyscall_dragonfly_amd64.go +++ b/src/syscall/zsyscall_dragonfly_amd64.go @@ -261,8 +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() (r int, w int, err error) { - r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) +func pipe2(flags int) (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE2, uintptr(flags), 0, 0) r = int(r0) w = int(r1) if e1 != 0 { diff --git a/src/syscall/zsysnum_dragonfly_amd64.go b/src/syscall/zsysnum_dragonfly_amd64.go index 9ce11f5899..58582b9e7a 100644 --- a/src/syscall/zsysnum_dragonfly_amd64.go +++ b/src/syscall/zsysnum_dragonfly_amd64.go @@ -301,6 +301,7 @@ const ( SYS_LPATHCONF = 533 // { int lpathconf(char *path, int name); } SYS_VMM_GUEST_CTL = 534 // { int vmm_guest_ctl(int op, struct vmm_guest_options *options); } SYS_VMM_GUEST_SYNC_ADDR = 535 // { int vmm_guest_sync_addr(long *dstaddr, long *srcaddr); } + SYS_PIPE2 = 538 // { int pipe2(int *fildes, int flags); } SYS_UTIMENSAT = 539 // { int utimensat(int fd, const char *path, const struct timespec *ts, int flags); } SYS_ACCEPT4 = 541 // { int accept4(int s, caddr_t name, int *anamelen, int flags); } ) -- 2.30.9