mirror of
https://github.com/golang/go
synced 2024-11-20 01:14:40 -07:00
syscall: fix exec_bsd.go to accompany exec_linux.go changes
exec_plan9.go too. Those are in CL 8334044 R=golang-dev, iant CC=golang-dev https://golang.org/cl/9055043
This commit is contained in:
parent
5c0d782ab8
commit
479b1241b5
@ -39,10 +39,18 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr
|
|||||||
i int
|
i int
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// guard against side effects of shuffling fds below.
|
||||||
|
// Make sure that nextfd is beyond any currently open files so
|
||||||
|
// that we can't run the risk of overwriting any of them.
|
||||||
fd := make([]int, len(attr.Files))
|
fd := make([]int, len(attr.Files))
|
||||||
|
nextfd = len(attr.Files)
|
||||||
for i, ufd := range attr.Files {
|
for i, ufd := range attr.Files {
|
||||||
|
if nextfd < int(ufd) {
|
||||||
|
nextfd = int(ufd)
|
||||||
|
}
|
||||||
fd[i] = int(ufd)
|
fd[i] = int(ufd)
|
||||||
}
|
}
|
||||||
|
nextfd++
|
||||||
|
|
||||||
darwin := runtime.GOOS == "darwin"
|
darwin := runtime.GOOS == "darwin"
|
||||||
|
|
||||||
@ -131,7 +139,6 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr
|
|||||||
|
|
||||||
// Pass 1: look for fd[i] < i and move those up above len(fd)
|
// Pass 1: look for fd[i] < i and move those up above len(fd)
|
||||||
// so that pass 2 won't stomp on an fd it needs later.
|
// so that pass 2 won't stomp on an fd it needs later.
|
||||||
nextfd = int(len(fd))
|
|
||||||
if pipe < nextfd {
|
if pipe < nextfd {
|
||||||
_, _, err1 = RawSyscall(SYS_DUP2, uintptr(pipe), uintptr(nextfd), 0)
|
_, _, err1 = RawSyscall(SYS_DUP2, uintptr(pipe), uintptr(nextfd), 0)
|
||||||
if err1 != 0 {
|
if err1 != 0 {
|
||||||
|
@ -183,11 +183,18 @@ func forkAndExecInChild(argv0 *byte, argv []*byte, envv []envItem, dir *byte, at
|
|||||||
errbuf [ERRMAX]byte
|
errbuf [ERRMAX]byte
|
||||||
)
|
)
|
||||||
|
|
||||||
// guard against side effects of shuffling fds below.
|
// Guard against side effects of shuffling fds below.
|
||||||
|
// Make sure that nextfd is beyond any currently open files so
|
||||||
|
// that we can't run the risk of overwriting any of them.
|
||||||
fd := make([]int, len(attr.Files))
|
fd := make([]int, len(attr.Files))
|
||||||
|
nextfd = len(attr.Files)
|
||||||
for i, ufd := range attr.Files {
|
for i, ufd := range attr.Files {
|
||||||
|
if nextfd < int(ufd) {
|
||||||
|
nextfd = int(ufd)
|
||||||
|
}
|
||||||
fd[i] = int(ufd)
|
fd[i] = int(ufd)
|
||||||
}
|
}
|
||||||
|
nextfd++
|
||||||
|
|
||||||
if envv != nil {
|
if envv != nil {
|
||||||
clearenv = RFCENVG
|
clearenv = RFCENVG
|
||||||
@ -251,7 +258,6 @@ func forkAndExecInChild(argv0 *byte, argv []*byte, envv []envItem, dir *byte, at
|
|||||||
|
|
||||||
// Pass 1: look for fd[i] < i and move those up above len(fd)
|
// Pass 1: look for fd[i] < i and move those up above len(fd)
|
||||||
// so that pass 2 won't stomp on an fd it needs later.
|
// so that pass 2 won't stomp on an fd it needs later.
|
||||||
nextfd = int(len(fd))
|
|
||||||
if pipe < nextfd {
|
if pipe < nextfd {
|
||||||
r1, _, _ = RawSyscall(SYS_DUP, uintptr(pipe), uintptr(nextfd), 0)
|
r1, _, _ = RawSyscall(SYS_DUP, uintptr(pipe), uintptr(nextfd), 0)
|
||||||
if int32(r1) == -1 {
|
if int32(r1) == -1 {
|
||||||
|
Loading…
Reference in New Issue
Block a user