From e0be8a5c203451b47fd3da59b0e0f56cc3d42f22 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 30 Mar 2012 21:10:32 +0000 Subject: [PATCH] syscall: Convert errno to error after Exitsyscall. From-SVN: r186020 --- libgo/go/syscall/mksyscall.awk | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/libgo/go/syscall/mksyscall.awk b/libgo/go/syscall/mksyscall.awk index 5e30e863231..b81796031ca 100644 --- a/libgo/go/syscall/mksyscall.awk +++ b/libgo/go/syscall/mksyscall.awk @@ -199,6 +199,7 @@ BEGIN { } printf("c_%s(%s)\n", cfnname, args) + seterr = 0 if (gofnresults != "") { fields = split(gofnresults, goresults, ", *") if (fields > 2) { @@ -218,13 +219,17 @@ BEGIN { gotype = goparam[2] if (goname == "err") { + print "\tvar errno Errno" + print "\tsetErrno := false" if (cfnresult ~ /^\*/) { print "\tif _r == nil {" } else { print "\tif _r < 0 {" } - print "\t\terr = GetErrno()" + print "\t\terrno = GetErrno()" + print "\t\tsetErrno = true" print "\t}" + seterr = 1 } else if (gotype == "uintptr" && cfnresult ~ /^\*/) { printf("\t%s = (%s)(unsafe.Pointer(_r))\n", goname, gotype) } else { @@ -243,6 +248,12 @@ BEGIN { print "\tExitsyscall()" } + if (seterr) { + print "\tif setErrno {" + print "\t\terr = errno" + print "\t}" + } + if (gofnresults != "") { print "\treturn" }