diff options
Diffstat (limited to 'internal/syscallcompat')
| -rw-r--r-- | internal/syscallcompat/sys_darwin.go | 9 | ||||
| -rw-r--r-- | internal/syscallcompat/sys_linux.go | 6 | 
2 files changed, 15 insertions, 0 deletions
| diff --git a/internal/syscallcompat/sys_darwin.go b/internal/syscallcompat/sys_darwin.go index e635034..e77cd98 100644 --- a/internal/syscallcompat/sys_darwin.go +++ b/internal/syscallcompat/sys_darwin.go @@ -1,6 +1,7 @@  package syscallcompat  import ( +	"log"  	"os"  	"path/filepath"  	"sync" @@ -122,3 +123,11 @@ func dirfdAbs(dirfd int, path string) (string, error) {  	}  	return filepath.Join(wd, path), nil  } + +// Dup3 is not available on Darwin, so we use Dup2 instead. +func Dup3(oldfd int, newfd int, flags int) (err error) { +	if flags != 0 { +		log.Panic("darwin does not support dup3 flags") +	} +	return syscall.Dup2(oldfd, newfd) +} diff --git a/internal/syscallcompat/sys_linux.go b/internal/syscallcompat/sys_linux.go index 93516f3..441f904 100644 --- a/internal/syscallcompat/sys_linux.go +++ b/internal/syscallcompat/sys_linux.go @@ -62,3 +62,9 @@ func Unlinkat(dirfd int, path string) error {  func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {  	return syscall.Mknodat(dirfd, path, mode, dev)  } + +// Dup3 wraps the Dup3 syscall. We want to use Dup3 rather than Dup2 because Dup2 +// is not implemented on arm64. +func Dup3(oldfd int, newfd int, flags int) (err error) { +	return syscall.Dup3(oldfd, newfd, flags) +} | 
