1package hcsshim
2
3import (
4	"io"
5	"syscall"
6
7	"github.com/Microsoft/go-winio"
8)
9
10// makeOpenFiles calls winio.MakeOpenFile for each handle in a slice but closes all the handles
11// if there is an error.
12func makeOpenFiles(hs []syscall.Handle) (_ []io.ReadWriteCloser, err error) {
13	fs := make([]io.ReadWriteCloser, len(hs))
14	for i, h := range hs {
15		if h != syscall.Handle(0) {
16			if err == nil {
17				fs[i], err = winio.MakeOpenFile(h)
18			}
19			if err != nil {
20				syscall.Close(h)
21			}
22		}
23	}
24	if err != nil {
25		for _, f := range fs {
26			if f != nil {
27				f.Close()
28			}
29		}
30		return nil, err
31	}
32	return fs, nil
33}
34