diff --git a/unix/dup3_test.go b/unix/dup3_test.go index 9201e355..12baf126 100644 --- a/unix/dup3_test.go +++ b/unix/dup3_test.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. -//go:build freebsd || linux || netbsd || openbsd +//go:build dragonfly || freebsd || linux || netbsd || openbsd package unix_test @@ -16,7 +16,7 @@ import ( ) func TestDup3(t *testing.T) { - tempFile, err := os.Create(filepath.Join(t.TempDir(), "TestDup")) + tempFile, err := os.Create(filepath.Join(t.TempDir(), "TestDup3")) if err != nil { t.Fatal(err) } diff --git a/unix/syscall_dragonfly.go b/unix/syscall_dragonfly.go index 97cb916f..be8c0020 100644 --- a/unix/syscall_dragonfly.go +++ b/unix/syscall_dragonfly.go @@ -246,6 +246,18 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e return sendfile(outfd, infd, offset, count) } +func Dup3(oldfd, newfd, flags int) error { + if oldfd == newfd || flags&^O_CLOEXEC != 0 { + return EINVAL + } + how := F_DUP2FD + if flags&O_CLOEXEC != 0 { + how = F_DUP2FD_CLOEXEC + } + _, err := fcntl(oldfd, how, newfd) + return err +} + /* * Exposed directly */