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