make syscall.ProcAttr.Files be []uintptr
all.bash passes on Linux.
things seem to compile on GOOS={darwin,windows}
R=golang-dev, mattn.jp, alex.brainman, rsc
CC=golang-dev
https://golang.org/cl/
5653055
var o sendfileOp
o.Init(c, 'w')
o.n = uint32(n)
- o.src = f.Fd()
+ o.src = syscall.Handle(f.Fd())
done, err := iosrv.ExecIO(&o, 0)
if err != nil {
return 0, err, false
"runtime"
"strconv"
"strings"
- "syscall"
"testing"
)
// Ensure that file descriptors have not already been leaked into
// our environment.
- for fd := int(os.Stderr.Fd()) + 1; fd <= 101; fd++ {
- err := syscall.Close(fd)
+ for fd := os.Stderr.Fd() + 1; fd <= 101; fd++ {
+ err := os.NewFile(fd, "").Close()
if err == nil {
t.Logf("Something already leaked - closed fd %d", fd)
}
sysattr.Env = Environ()
}
for _, f := range attr.Files {
- sysattr.Files = append(sysattr.Files, int(f.Fd()))
+ sysattr.Files = append(sysattr.Files, f.Fd())
}
pid, h, e := syscall.StartProcess(name, argv, sysattr)
syscall.CloseOnExec(r)
}
- return NewFile(r, name), nil
+ return NewFile(uintptr(r), name), nil
}
func openDir(name string) (file *File, err error) {
if e != nil {
return nil, &PathError{"open", name, e}
}
- f := NewFile(r, name)
+ f := NewFile(uintptr(r), name)
f.dirinfo = d
return f, nil
}
syscall.CloseOnExec(p[1])
syscall.ForkLock.RUnlock()
- return NewFile(p[0], "|0"), NewFile(p[1], "|1"), nil
+ return NewFile(uintptr(p[0]), "|0"), NewFile(uintptr(p[1]), "|1"), nil
}
// TempDir returns the default directory to use for temporary files.
i int
)
- // guard against side effects of shuffling fds below.
- fd := append([]int(nil), attr.Files...)
+ fd := make([]int, len(attr.Files))
+ for i, ufd := range attr.Files {
+ fd[i] = int(ufd)
+ }
darwin := runtime.GOOS == "darwin"
)
// guard against side effects of shuffling fds below.
- fd := append([]int(nil), attr.Files...)
+ fd := make([]int, len(attr.Files))
+ for i, ufd := range attr.Files {
+ fd[i] = int(ufd)
+ }
// About to call fork.
// No more allocation or calls of non-assembly functions.
// ProcAttr holds attributes that will be applied to a new process started
// by StartProcess.
type ProcAttr struct {
- Dir string // Current working directory.
- Env []string // Environment.
- Files []int // File descriptors.
+ Dir string // Current working directory.
+ Env []string // Environment.
+ Files []uintptr // File descriptors.
Sys *SysProcAttr
}
type ProcAttr struct {
Dir string
Env []string
- Files []Handle
+ Files []uintptr
Sys *SysProcAttr
}