printer.Fprint(fgo2, d)
fmt.Fprintf(fgo2, "\n")
- if name == "CString" || name == "GoString" {
+ if name == "CString" || name == "GoString" || name == "GoStringN" {
// The builtins are already defined in the C prolog.
return
}
func (p *Package) writeOutputFunc(fgcc *os.File, n *Name) {
name := n.Mangle
- if name == "_Cfunc_CString" || name == "_Cfunc_GoString" || p.Written[name] {
+ if name == "_Cfunc_CString" || name == "_Cfunc_GoString" || name == "_Cfunc_GoStringN" || p.Written[name] {
// The builtins are already defined in the C prolog, and we don't
// want to duplicate function definitions we've already done.
return
const builtinProlog = `
typedef struct { char *p; int n; } _GoString_;
_GoString_ GoString(char *p);
+_GoString_ GoStringN(char *p, int l);
char *CString(_GoString_);
`
FLUSH(&s);
}
+void
+·_Cfunc_GoStringN(int8 *p, int32 l, String s)
+{
+ s = gostringn((byte*)p, l);
+ FLUSH(&s);
+}
+
void
·_Cfunc_CString(String s, int8 *p)
{
uint32 cmpstring(String, String);
String catstring(String, String);
String gostring(byte*);
+String gostringn(byte*, int32);
String gostringnocopy(byte*);
String gostringw(uint16*);
void initsig(int32);