aboutsummaryrefslogtreecommitdiff
path: root/internal/syscallcompat
diff options
context:
space:
mode:
Diffstat (limited to 'internal/syscallcompat')
-rw-r--r--internal/syscallcompat/sys_darwin.go9
-rw-r--r--internal/syscallcompat/sys_linux.go6
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)
+}