cgo: various bug fixes
* remember #defined names, so that C.stdout can refer
to the real name (on OS X) __stdoutp.
* better handling of #defined constant expressions
* allow n, err = C.strtol("asdf", 0, 123) to get errno as os.Error
* write all output files to current directory
* don't require gcc output if there was no input
Fixes #533.
Fixes #709.
Fixes #756.
R=r
CC=dho, golang-dev, iant
https://golang.org/cl/1734047
diff --git a/misc/cgo/stdio/file.go b/misc/cgo/stdio/file.go
index 7d1f222..1f461f2 100644
--- a/misc/cgo/stdio/file.go
+++ b/misc/cgo/stdio/file.go
@@ -10,33 +10,31 @@
package stdio
-// TODO(rsc): Remove fflushstdout when C.fflush(C.stdout) works in cgo.
-
/*
#include <stdio.h>
#include <stdlib.h>
+#include <sys/stat.h>
+#include <errno.h>
-void fflushstdout(void) { fflush(stdout); }
+char* greeting = "hello, world";
*/
import "C"
import "unsafe"
-/*
type File C.FILE
var Stdout = (*File)(C.stdout)
var Stderr = (*File)(C.stderr)
func (f *File) WriteString(s string) {
- p := C.CString(s);
- C.fputs(p, (*C.FILE)(f));
- C.free(p);
-}
-*/
-
-func Puts(s string) {
p := C.CString(s)
- C.puts(p)
+ C.fputs(p, (*C.FILE)(f))
C.free(unsafe.Pointer(p))
- C.fflushstdout()
+ f.Flush()
}
+
+func (f *File) Flush() {
+ C.fflush((*C.FILE)(f))
+}
+
+var Greeting = C.GoString(C.greeting)