summaryrefslogtreecommitdiff
path: root/vendor
diff options
context:
space:
mode:
authorSebastiaan van Stijn <github@gone.nl>2020-11-18 10:54:06 +0100
committerSebastiaan van Stijn <github@gone.nl>2020-11-19 10:30:50 +0100
commitba475d44a7906f20a0eb9b92fcd126a5f339bbd0 (patch)
tree86b9643078fc3bc6d3ebd22f53413ff7b7a3751f /vendor
parent37da117aba560ad9f7dc56ebcf0e881d7f4ab6bc (diff)
downloaddocker-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.go20
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) {