12345678910111213141516171819202122232425262728293031323334 |
- 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
- }
|