Skip to content

Commit baf6c1d

Browse files
committed
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 <[email protected]>
1 parent 6a2d399 commit baf6c1d

1 file changed

Lines changed: 10 additions & 12 deletions

File tree

cio/io_unix.go

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -103,38 +103,36 @@ func copyIO(fifos *FIFOSet, ioset *Streams) (*cio, error) {
103103
}, nil
104104
}
105105

106-
func openFifos(ctx context.Context, fifos *FIFOSet) (pipes, error) {
107-
var err error
106+
func openFifos(ctx context.Context, fifos *FIFOSet) (f pipes, retErr error) {
108107
defer func() {
109-
if err != nil {
108+
if retErr != nil {
110109
fifos.Close()
111110
}
112111
}()
113112

114-
var f pipes
115113
if fifos.Stdin != "" {
116-
if f.Stdin, err = fifo.OpenFifo(ctx, fifos.Stdin, syscall.O_WRONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); err != nil {
117-
return f, errors.Wrapf(err, "failed to open stdin fifo")
114+
if f.Stdin, retErr = fifo.OpenFifo(ctx, fifos.Stdin, syscall.O_WRONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); retErr != nil {
115+
return f, errors.Wrapf(retErr, "failed to open stdin fifo")
118116
}
119117
defer func() {
120-
if err != nil && f.Stdin != nil {
118+
if retErr != nil && f.Stdin != nil {
121119
f.Stdin.Close()
122120
}
123121
}()
124122
}
125123
if fifos.Stdout != "" {
126-
if f.Stdout, err = fifo.OpenFifo(ctx, fifos.Stdout, syscall.O_RDONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); err != nil {
127-
return f, errors.Wrapf(err, "failed to open stdout fifo")
124+
if f.Stdout, retErr = fifo.OpenFifo(ctx, fifos.Stdout, syscall.O_RDONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); retErr != nil {
125+
return f, errors.Wrapf(retErr, "failed to open stdout fifo")
128126
}
129127
defer func() {
130-
if err != nil && f.Stdout != nil {
128+
if retErr != nil && f.Stdout != nil {
131129
f.Stdout.Close()
132130
}
133131
}()
134132
}
135133
if !fifos.Terminal && fifos.Stderr != "" {
136-
if f.Stderr, err = fifo.OpenFifo(ctx, fifos.Stderr, syscall.O_RDONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); err != nil {
137-
return f, errors.Wrapf(err, "failed to open stderr fifo")
134+
if f.Stderr, retErr = fifo.OpenFifo(ctx, fifos.Stderr, syscall.O_RDONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); retErr != nil {
135+
return f, errors.Wrapf(retErr, "failed to open stderr fifo")
138136
}
139137
}
140138
return f, nil

0 commit comments

Comments
 (0)