diff options
Diffstat (limited to 'libgo/go/syscall/mksyscall.awk')
-rw-r--r-- | libgo/go/syscall/mksyscall.awk | 22 |
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] == "") { |