From: Shenghou Ma Date: Sat, 1 Mar 2014 23:56:50 +0000 (-0500) Subject: syscall: workaround Dragonfly BSD kernel exec bug X-Git-Tag: go1.3beta1~522 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=5fbd6044bce8b032c72378a0db5106c235df9067;p=gostls13.git syscall: workaround Dragonfly BSD kernel exec bug 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 --- diff --git a/src/pkg/syscall/exec_unix.go b/src/pkg/syscall/exec_unix.go index 93670daeed..890bfdc227 100644 --- a/src/pkg/syscall/exec_unix.go +++ b/src/pkg/syscall/exec_unix.go @@ -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 }