Text file
misc/cgo/test/callback_c.c
1 // Copyright 2011 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 #include <string.h>
6 #include <sys/types.h>
7 #include <unistd.h>
8 #include "_cgo_export.h"
9
10 void
11 callback(void *f)
12 {
13 // use some stack space
14 volatile char data[64*1024];
15
16 data[0] = 0;
17 goCallback(f);
18 data[sizeof(data)-1] = 0;
19 }
20
21 void
22 callGoFoo(void)
23 {
24 extern void goFoo(void);
25 goFoo();
26 }
27
28 void
29 IntoC(void)
30 {
31 BackIntoGo();
32 }
33
34 #ifdef WIN32
35 #include <windows.h>
36 long long
37 mysleep(int seconds) {
38 long long st = GetTickCount();
39 Sleep(1000 * seconds);
40 return st;
41 }
42 #else
43 #include <sys/time.h>
44 long long
45 mysleep(int seconds) {
46 long long st;
47 struct timeval tv;
48 gettimeofday(&tv, NULL);
49 st = tv.tv_sec * 1000 + tv.tv_usec / 1000;
50 sleep(seconds);
51 return st;
52 }
53 #endif
54
55 long long
56 twoSleep(int n)
57 {
58 BackgroundSleep(n);
59 return mysleep(n);
60 }
61
62 void
63 callGoStackCheck(void)
64 {
65 extern void goStackCheck(void);
66 goStackCheck();
67 }
68
69 int
70 returnAfterGrow(void)
71 {
72 extern int goReturnVal(void);
73 goReturnVal();
74 return 123456;
75 }
76
77 int
78 returnAfterGrowFromGo(void)
79 {
80 extern int goReturnVal(void);
81 return goReturnVal();
82 }
83
84 void
85 callGoWithString(void)
86 {
87 extern void goWithString(GoString);
88 const char *str = "string passed from C to Go";
89 goWithString((GoString){str, strlen(str)});
90 }
91
View as plain text