2018-09-05 14:54:38 -04:00
|
|
|
package hcs
|
2018-03-19 18:57:30 -04:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|