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