]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: workaround Dragonfly BSD kernel exec bug
authorShenghou Ma <minux.ma@gmail.com>
Sat, 1 Mar 2014 23:56:50 +0000 (18:56 -0500)
committerShenghou Ma <minux.ma@gmail.com>
Sat, 1 Mar 2014 23:56:50 +0000 (18:56 -0500)
See also CL 4259056 for FreeBSD.

Test program:
// exec.go
package main
import (
        "log"
        "os"
        "os/exec"
        "runtime"
)
func main() {
        path := runtime.GOROOT() + "/src/pkg/net/http/cgi/testdata"
        cmd := &exec.Cmd{
                Path:   "test.cgi",
                Args:   []string{path + "/test.cgi"},
                Dir:    path
                Stdout: os.Stdout}
        if err := cmd.Start(); err != nil {
                log.Fatal(err)
        }
        if err := cmd.Wait(); err != nil {
                log.Fatal(err)
        }
}

$ go run exec.go
2014/03/01 15:52:41 fork/exec test.cgi: argument list too long

LGTM=iant
R=rsc, iant
CC=golang-codereviews
https://golang.org/cl/69970044

src/pkg/syscall/exec_unix.go

index 93670daeed289dd4ab3ca4c4ad590fceeb0dd492..890bfdc2272caef6167188b084f90b729fc3c49c 100644 (file)
@@ -158,7 +158,7 @@ func forkExec(argv0 string, argv []string, attr *ProcAttr) (pid int, err error)
                return 0, err
        }
 
-       if runtime.GOOS == "freebsd" && len(argv[0]) > len(argv0) {
+       if (runtime.GOOS == "freebsd" || runtime.GOOS == "dragonfly") && len(argv[0]) > len(argv0) {
                argvp[0] = argv0p
        }