package hcs import ( "io" "syscall" "github.com/Microsoft/go-winio" ) // makeOpenFiles calls winio.MakeOpenFile for each handle in a slice but closes all the handles // if there is an error. func makeOpenFiles(hs []syscall.Handle) (_ []io.ReadWriteCloser, err error) { fs := make([]io.ReadWriteCloser, len(hs)) for i, h := range hs { if h != syscall.Handle(0) { if err == nil { fs[i], err = winio.MakeOpenFile(h) } if err != nil { syscall.Close(h) } } } if err != nil { for _, f := range fs { if f != nil { f.Close() } } return nil, err } return fs, nil }