github.com/riscv/riscv-go@v0.0.0-20200123204226-124ebd6fcc8e/misc/cgo/test/callback_c.c (about) 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 }