From: Ian Lance Taylor Date: Wed, 21 Mar 2012 17:38:58 +0000 (-0700) Subject: cmd/cgo: fix handling of errno for gccgo X-Git-Tag: weekly.2012-03-22~20 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=3a3c5aad4e6ccef38a1e6d56652523c3258da6a8;p=gostls13.git cmd/cgo: fix handling of errno for gccgo Fixes #3332. R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/5868047 --- diff --git a/src/cmd/cgo/out.go b/src/cmd/cgo/out.go index 933d7e6cab..814250c2ec 100644 --- a/src/cmd/cgo/out.go +++ b/src/cmd/cgo/out.go @@ -284,8 +284,13 @@ func (p *Package) writeDefsFunc(fc, fgo2 *os.File, n *Name) { } conf.Fprint(fgo2, fset, d) fmt.Fprintf(fgo2, "{\n") + fmt.Fprintf(fgo2, "\tsyscall.SetErrno(0)\n") fmt.Fprintf(fgo2, "\tr := %s(%s)\n", cname, strings.Join(paramnames, ", ")) - fmt.Fprintf(fgo2, "\treturn r, syscall.GetErrno()\n") + fmt.Fprintf(fgo2, "\te := syscall.GetErrno()\n") + fmt.Fprintf(fgo2, "\tif e != 0 {\n") + fmt.Fprintf(fgo2, "\t\treturn r, e\n") + fmt.Fprintf(fgo2, "\t}\n") + fmt.Fprintf(fgo2, "\treturn r, nil\n") fmt.Fprintf(fgo2, "}\n") // declare the C function. fmt.Fprintf(fgo2, "//extern %s\n", n.C)