From eee3dd1292ba1b4282b39e3288239d5259a765b4 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 9 Jan 2013 15:25:46 -0800 Subject: [PATCH] cmd/cgo: for gccgo: use intgo, don't use slice as void return type R=golang-dev, rsc CC=golang-dev https://golang.org/cl/7057064 --- src/cmd/cgo/out.go | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/cmd/cgo/out.go b/src/cmd/cgo/out.go index 58ac92fa31..ef1d06978c 100644 --- a/src/cmd/cgo/out.go +++ b/src/cmd/cgo/out.go @@ -75,7 +75,11 @@ func (p *Package) writeDefs() { conf.Fprint(fgo2, fset, def.Go) fmt.Fprintf(fgo2, "\n\n") } - fmt.Fprintf(fgo2, "type _Ctype_void [0]byte\n") + if *gccgo { + fmt.Fprintf(fgo2, "type _Ctype_void byte\n") + } else { + fmt.Fprintf(fgo2, "type _Ctype_void [0]byte\n") + } if *gccgo { fmt.Fprintf(fc, cPrologGccgo) @@ -1062,19 +1066,20 @@ const cPrologGccgo = ` #include typedef unsigned char byte; +typedef intptr_t intgo; struct __go_string { const unsigned char *__data; - int __length; + intgo __length; }; typedef struct __go_open_array { void* __values; - int __count; - int __capacity; + intgo __count; + intgo __capacity; } Slice; -struct __go_string __go_byte_array_to_string(const void* p, int len); +struct __go_string __go_byte_array_to_string(const void* p, intgo len); struct __go_open_array __go_string_to_byte_array (struct __go_string str); const char *CString(struct __go_string s) { @@ -1082,15 +1087,15 @@ const char *CString(struct __go_string s) { } struct __go_string GoString(char *p) { - int len = (p != NULL) ? strlen(p) : 0; + intgo len = (p != NULL) ? strlen(p) : 0; return __go_byte_array_to_string(p, len); } -struct __go_string GoStringN(char *p, int n) { +struct __go_string GoStringN(char *p, intgo n) { return __go_byte_array_to_string(p, n); } -Slice GoBytes(char *p, int n) { +Slice GoBytes(char *p, intgo n) { struct __go_string s = { (const unsigned char *)p, n }; return __go_string_to_byte_array(s); } -- 2.48.1