]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/cgo: fix handling of errno for gccgo
authorIan Lance Taylor <iant@golang.org>
Wed, 21 Mar 2012 17:38:58 +0000 (10:38 -0700)
committerIan Lance Taylor <iant@golang.org>
Wed, 21 Mar 2012 17:38:58 +0000 (10:38 -0700)
Fixes #3332.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/5868047

src/cmd/cgo/out.go

index 933d7e6cabfd0b5bca2a00a871eda8d09e0eb4b1..814250c2ec3dd50b130d4f29d35a59087848d589 100644 (file)
@@ -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)