summaryrefslogtreecommitdiffstats
path: root/misc/swig/stdio
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-16 19:23:18 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-16 19:23:18 +0000
commit43a123c1ae6613b3efeed291fa552ecd909d3acf (patch)
treefd92518b7024bc74031f78a1cf9e454b65e73665 /misc/swig/stdio
parentInitial commit. (diff)
downloadgolang-1.20-43a123c1ae6613b3efeed291fa552ecd909d3acf.tar.xz
golang-1.20-43a123c1ae6613b3efeed291fa552ecd909d3acf.zip
Adding upstream version 1.20.14.upstream/1.20.14upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'misc/swig/stdio')
-rw-r--r--misc/swig/stdio/file.go15
-rw-r--r--misc/swig/stdio/file.swig24
-rw-r--r--misc/swig/stdio/file_test.go28
3 files changed, 67 insertions, 0 deletions
diff --git a/misc/swig/stdio/file.go b/misc/swig/stdio/file.go
new file mode 100644
index 0000000..a582f77
--- /dev/null
+++ b/misc/swig/stdio/file.go
@@ -0,0 +1,15 @@
+// Copyright 2017 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.
+
+// This file is here just to cause problems.
+// file.swig turns into a file also named file.go.
+// Make sure cmd/go keeps them separate
+// when both are passed to cgo.
+
+package file
+
+//int F(void) { return 1; }
+import "C"
+
+func F() int { return int(C.F()) }
diff --git a/misc/swig/stdio/file.swig b/misc/swig/stdio/file.swig
new file mode 100644
index 0000000..b28ae0a
--- /dev/null
+++ b/misc/swig/stdio/file.swig
@@ -0,0 +1,24 @@
+/* Copyright 2011 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 using SWIG. */
+
+%{
+#include <stdio.h>
+#include <stdlib.h>
+%}
+
+%typemap(gotype) const char * "string"
+%typemap(in) const char * %{
+ $1 = malloc($input.n + 1);
+ memcpy($1, $input.p, $input.n);
+ $1[$input.n] = '\0';
+%}
+%typemap(freearg) const char * %{
+ free($1);
+%}
+
+FILE *fopen(const char *name, const char *mode);
+int fclose(FILE *);
+int fgetc(FILE *);
diff --git a/misc/swig/stdio/file_test.go b/misc/swig/stdio/file_test.go
new file mode 100644
index 0000000..aea92aa
--- /dev/null
+++ b/misc/swig/stdio/file_test.go
@@ -0,0 +1,28 @@
+// Copyright 2012 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.
+
+package file
+
+import "testing"
+
+// Open this file itself and verify that the first few characters are
+// as expected.
+func TestRead(t *testing.T) {
+ f := Fopen("file_test.go", "r")
+ if f.Swigcptr() == 0 {
+ t.Fatal("fopen failed")
+ }
+ if Fgetc(f) != '/' || Fgetc(f) != '/' || Fgetc(f) != ' ' || Fgetc(f) != 'C' {
+ t.Error("read unexpected characters")
+ }
+ if Fclose(f) != 0 {
+ t.Error("fclose failed")
+ }
+}
+
+func TestF(t *testing.T) {
+ if x := F(); x != 1 {
+ t.Fatalf("x = %d, want 1", x)
+ }
+}