aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2012-03-21 10:38:58 -0700
committerIan Lance Taylor <iant@golang.org>2012-03-21 10:38:58 -0700
commit3a3c5aad4e6ccef38a1e6d56652523c3258da6a8 (patch)
treeb0608c1ddf2660f776b7746d40cbc9fed1b77ce7
parent0532f4d382ad4f9813dcebcf4cfb1a086c8588bf (diff)
downloadgo-3a3c5aad4e6ccef38a1e6d56652523c3258da6a8.tar.gz
go-3a3c5aad4e6ccef38a1e6d56652523c3258da6a8.zip
cmd/cgo: fix handling of errno for gccgo
Fixes #3332. R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/5868047
-rw-r--r--src/cmd/cgo/out.go7
1 files changed, 6 insertions, 1 deletions
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)