@@ -6,6 +6,14 @@ import (
66 "golang.org/x/sys/unix"
77)
88
9+ // Dup3 wraps [unix.Dup3].
10+ func Dup3 (oldfd , newfd , flags int ) error {
11+ err := retryOnEINTR (func () error {
12+ return unix .Dup3 (oldfd , newfd , flags )
13+ })
14+ return os .NewSyscallError ("dup3" , err )
15+ }
16+
917// Exec wraps [unix.Exec].
1018func Exec (cmd string , args []string , env []string ) error {
1119 err := retryOnEINTR (func () error {
@@ -23,6 +31,28 @@ func Getwd() (wd string, err error) {
2331 return wd , os .NewSyscallError ("getwd" , err )
2432}
2533
34+ // Open wraps [unix.Open].
35+ func Open (path string , mode int , perm uint32 ) (fd int , err error ) {
36+ fd , err = retryOnEINTR2 (func () (int , error ) {
37+ return unix .Open (path , mode , perm )
38+ })
39+ if err != nil {
40+ return - 1 , & os.PathError {Op : "open" , Path : path , Err : err }
41+ }
42+ return fd , nil
43+ }
44+
45+ // Openat wraps [unix.Openat].
46+ func Openat (dirfd int , path string , mode int , perm uint32 ) (fd int , err error ) {
47+ fd , err = retryOnEINTR2 (func () (int , error ) {
48+ return unix .Openat (dirfd , path , mode , perm )
49+ })
50+ if err != nil {
51+ return - 1 , & os.PathError {Op : "openat" , Path : path , Err : err }
52+ }
53+ return fd , nil
54+ }
55+
2656// Sendmsg wraps [unix.Sendmsg].
2757func Sendmsg (fd int , p , oob []byte , to unix.Sockaddr , flags int ) error {
2858 err := retryOnEINTR (func () error {
0 commit comments