diff options
author | Sebastiaan van Stijn <github@gone.nl> | 2020-11-18 10:54:06 +0100 |
---|---|---|
committer | Sebastiaan van Stijn <github@gone.nl> | 2020-11-19 10:30:50 +0100 |
commit | ba475d44a7906f20a0eb9b92fcd126a5f339bbd0 (patch) | |
tree | 86b9643078fc3bc6d3ebd22f53413ff7b7a3751f /vendor | |
parent | 37da117aba560ad9f7dc56ebcf0e881d7f4ab6bc (diff) | |
download | docker-ba475d44a7906f20a0eb9b92fcd126a5f339bbd0.tar.gz |
vendor: github.com/containerd/fifo 0724c46b320cf96bb172a0550c19a4b1fca4dacb
full diff: https://github.com/containerd/fifo/compare/f15a3290365b9d2627d189e619ab4008e0069caf...0724c46b320cf96bb172a0550c19a4b1fca4dacb
- Add OpenFifoDup2
- use golang.org/x/sys/unix for dup2 (fixes build on arm64)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Diffstat (limited to 'vendor')
-rw-r--r-- | vendor/github.com/containerd/fifo/fifo.go | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/vendor/github.com/containerd/fifo/fifo.go b/vendor/github.com/containerd/fifo/fifo.go index 71f9aefc3a..96c214f270 100644 --- a/vendor/github.com/containerd/fifo/fifo.go +++ b/vendor/github.com/containerd/fifo/fifo.go @@ -25,6 +25,7 @@ import ( "syscall" "github.com/pkg/errors" + "golang.org/x/sys/unix" ) type fifo struct { @@ -41,6 +42,21 @@ type fifo struct { var leakCheckWg *sync.WaitGroup +// OpenFifoDup2 is same as OpenFifo, but additionally creates a copy of the FIFO file descriptor with dup2 syscall. +func OpenFifoDup2(ctx context.Context, fn string, flag int, perm os.FileMode, fd int) (io.ReadWriteCloser, error) { + f, err := openFifo(ctx, fn, flag, perm) + if err != nil { + return nil, errors.Wrap(err, "fifo error") + } + + if err := unix.Dup2(int(f.file.Fd()), fd); err != nil { + _ = f.Close() + return nil, errors.Wrap(err, "dup2 error") + } + + return f, nil +} + // OpenFifo opens a fifo. Returns io.ReadWriteCloser. // Context can be used to cancel this function until open(2) has not returned. // Accepted flags: @@ -52,6 +68,10 @@ var leakCheckWg *sync.WaitGroup // fifo isn't open. read/write will be connected after the actual fifo is // open or after fifo is closed. func OpenFifo(ctx context.Context, fn string, flag int, perm os.FileMode) (io.ReadWriteCloser, error) { + return openFifo(ctx, fn, flag, perm) +} + +func openFifo(ctx context.Context, fn string, flag int, perm os.FileMode) (*fifo, error) { if _, err := os.Stat(fn); err != nil { if os.IsNotExist(err) && flag&syscall.O_CREAT != 0 { if err := mkfifo(fn, uint32(perm&os.ModePerm)); err != nil && !os.IsExist(err) { |