// 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. #include <string.h> #include <sys/types.h> #include <unistd.h> #include "_cgo_export.h" void callback(void *f) { // use some stack space volatile char data[64*1024]; data[0] = 0; goCallback(f); data[sizeof(data)-1] = 0; } void callGoFoo(void) { extern void goFoo(void); goFoo(); } void IntoC(void) { BackIntoGo(); } #ifdef WIN32 #include <windows.h> long long mysleep(int seconds) { long long st = GetTickCount(); Sleep(1000 * seconds); return st; } #else #include <sys/time.h> long long mysleep(int seconds) { long long st; struct timeval tv; gettimeofday(&tv, NULL); st = tv.tv_sec * 1000 + tv.tv_usec / 1000; sleep(seconds); return st; } #endif long long twoSleep(int n) { BackgroundSleep(n); return mysleep(n); } void callGoStackCheck(void) { extern void goStackCheck(void); goStackCheck(); } int returnAfterGrow(void) { extern int goReturnVal(void); goReturnVal(); return 123456; } int returnAfterGrowFromGo(void) { extern int goReturnVal(void); return goReturnVal(); } void callGoWithString(void) { extern void goWithString(GoString); const char *str = "string passed from C to Go"; goWithString((GoString){str, strlen(str)}); }