summaryrefslogtreecommitdiff
path: root/src/pkg/go/build/cgotest/file.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/go/build/cgotest/file.go')
-rw-r--r--src/pkg/go/build/cgotest/file.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/pkg/go/build/cgotest/file.go b/src/pkg/go/build/cgotest/file.go
new file mode 100644
index 000000000..3b2a2e7d9
--- /dev/null
+++ b/src/pkg/go/build/cgotest/file.go
@@ -0,0 +1,45 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+/*
+A trivial example of wrapping a C library in Go.
+For a more complex example and explanation,
+see ../gmp/gmp.go.
+*/
+
+package stdio
+
+/*
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+char* greeting = "hello, world";
+*/
+import "C"
+import "unsafe"
+
+type File C.FILE
+
+// TODO(brainman): uncomment once stdout and stderr references are working on Windows.
+//var Stdout = (*File)(C.stdout)
+//var Stderr = (*File)(C.stderr)
+
+// Test reference to library symbol.
+// Stdout and stderr are too special to be a reliable test.
+var myerr = C.sys_errlist
+
+func (f *File) WriteString(s string) {
+ p := C.CString(s)
+ C.fputs(p, (*C.FILE)(f))
+ C.free(unsafe.Pointer(p))
+ f.Flush()
+}
+
+func (f *File) Flush() {
+ C.fflush((*C.FILE)(f))
+}
+
+var Greeting = C.GoString(C.greeting)