Home | History | Annotate | Download | only in test
      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