cio: openFifos() use named return variables to use in defer()
This change is mostly defensive; when checking for the returned error, it's easy to make a mistake, and check for a "local" error, not the actual returned error. This patch changes the function to use a named return variable, which is checked in the defer. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
6a2d3990d1
commit
baf6c1d5e2
@ -103,38 +103,36 @@ func copyIO(fifos *FIFOSet, ioset *Streams) (*cio, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func openFifos(ctx context.Context, fifos *FIFOSet) (pipes, error) {
|
func openFifos(ctx context.Context, fifos *FIFOSet) (f pipes, retErr error) {
|
||||||
var err error
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if err != nil {
|
if retErr != nil {
|
||||||
fifos.Close()
|
fifos.Close()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
var f pipes
|
|
||||||
if fifos.Stdin != "" {
|
if fifos.Stdin != "" {
|
||||||
if f.Stdin, err = fifo.OpenFifo(ctx, fifos.Stdin, syscall.O_WRONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); err != nil {
|
if f.Stdin, retErr = fifo.OpenFifo(ctx, fifos.Stdin, syscall.O_WRONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); retErr != nil {
|
||||||
return f, errors.Wrapf(err, "failed to open stdin fifo")
|
return f, errors.Wrapf(retErr, "failed to open stdin fifo")
|
||||||
}
|
}
|
||||||
defer func() {
|
defer func() {
|
||||||
if err != nil && f.Stdin != nil {
|
if retErr != nil && f.Stdin != nil {
|
||||||
f.Stdin.Close()
|
f.Stdin.Close()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
if fifos.Stdout != "" {
|
if fifos.Stdout != "" {
|
||||||
if f.Stdout, err = fifo.OpenFifo(ctx, fifos.Stdout, syscall.O_RDONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); err != nil {
|
if f.Stdout, retErr = fifo.OpenFifo(ctx, fifos.Stdout, syscall.O_RDONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); retErr != nil {
|
||||||
return f, errors.Wrapf(err, "failed to open stdout fifo")
|
return f, errors.Wrapf(retErr, "failed to open stdout fifo")
|
||||||
}
|
}
|
||||||
defer func() {
|
defer func() {
|
||||||
if err != nil && f.Stdout != nil {
|
if retErr != nil && f.Stdout != nil {
|
||||||
f.Stdout.Close()
|
f.Stdout.Close()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
if !fifos.Terminal && fifos.Stderr != "" {
|
if !fifos.Terminal && fifos.Stderr != "" {
|
||||||
if f.Stderr, err = fifo.OpenFifo(ctx, fifos.Stderr, syscall.O_RDONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); err != nil {
|
if f.Stderr, retErr = fifo.OpenFifo(ctx, fifos.Stderr, syscall.O_RDONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); retErr != nil {
|
||||||
return f, errors.Wrapf(err, "failed to open stderr fifo")
|
return f, errors.Wrapf(retErr, "failed to open stderr fifo")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return f, nil
|
return f, nil
|
||||||
|
Loading…
Reference in New Issue
Block a user