mirror of
https://github.com/opencontainers/runc.git
synced 2025-10-23 15:33:16 +08:00
int/linux: add/use Dup3, Open, Openat
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
This commit is contained in:
@@ -6,6 +6,14 @@ import (
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
// Dup3 wraps [unix.Dup3].
|
||||
func Dup3(oldfd, newfd, flags int) error {
|
||||
err := retryOnEINTR(func() error {
|
||||
return unix.Dup3(oldfd, newfd, flags)
|
||||
})
|
||||
return os.NewSyscallError("dup3", err)
|
||||
}
|
||||
|
||||
// Exec wraps [unix.Exec].
|
||||
func Exec(cmd string, args []string, env []string) error {
|
||||
err := retryOnEINTR(func() error {
|
||||
@@ -23,6 +31,28 @@ func Getwd() (wd string, err error) {
|
||||
return wd, os.NewSyscallError("getwd", err)
|
||||
}
|
||||
|
||||
// Open wraps [unix.Open].
|
||||
func Open(path string, mode int, perm uint32) (fd int, err error) {
|
||||
fd, err = retryOnEINTR2(func() (int, error) {
|
||||
return unix.Open(path, mode, perm)
|
||||
})
|
||||
if err != nil {
|
||||
return -1, &os.PathError{Op: "open", Path: path, Err: err}
|
||||
}
|
||||
return fd, nil
|
||||
}
|
||||
|
||||
// Openat wraps [unix.Openat].
|
||||
func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
|
||||
fd, err = retryOnEINTR2(func() (int, error) {
|
||||
return unix.Openat(dirfd, path, mode, perm)
|
||||
})
|
||||
if err != nil {
|
||||
return -1, &os.PathError{Op: "openat", Path: path, Err: err}
|
||||
}
|
||||
return fd, nil
|
||||
}
|
||||
|
||||
// Sendmsg wraps [unix.Sendmsg].
|
||||
func Sendmsg(fd int, p, oob []byte, to unix.Sockaddr, flags int) error {
|
||||
err := retryOnEINTR(func() error {
|
||||
|
Reference in New Issue
Block a user