aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/syscall/mksyscall.awk
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/syscall/mksyscall.awk')
-rw-r--r--libgo/go/syscall/mksyscall.awk22
1 files changed, 21 insertions, 1 deletions
diff --git a/libgo/go/syscall/mksyscall.awk b/libgo/go/syscall/mksyscall.awk
index b817960..74f0e28 100644
--- a/libgo/go/syscall/mksyscall.awk
+++ b/libgo/go/syscall/mksyscall.awk
@@ -104,6 +104,19 @@ BEGIN {
loc = gofnname "/" cfnname ":"
+ haserr = 0
+ if (gofnresults != "") {
+ fields = split(gofnresults, goresults, ", *")
+ for (goresult = 1; goresults[goresult] != ""; goresult++) {
+ if (split(goresults[goresult], goparam) == 2) {
+ if (goparam[1] == "err") {
+ haserr = 1
+ break
+ }
+ }
+ }
+ }
+
split(gofnparams, goargs, ", *")
split(cfnparams, cargs, ", *")
args = ""
@@ -147,7 +160,14 @@ BEGIN {
status = 1
next
}
- printf("\t_p%d := StringBytePtr(%s)\n", goarg, goname)
+ printf("\tvar _p%d *byte\n", goarg)
+ if (haserr) {
+ printf("\t_p%d, err = BytePtrFromString(%s)\n", goarg, goname)
+ printf("\tif err != nil {\n\t\treturn\n\t}\n")
+ } else {
+ print loc, "uses string arguments but has no error return" | "cat 1>&2"
+ printf("\t_p%d, _ = BytePtrFromString(%s)\n", goarg, goname)
+ }
args = sprintf("%s_p%d", args, goarg)
} else if (gotype ~ /^\[\](.*)/) {
if (ctype !~ /^\*/ || cargs[carg + 1] == "") {