diff options
| author | Pietro Gagliardi <[email protected]> | 2018-08-26 10:19:10 -0400 | 
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2018-08-26 10:19:10 -0400 | 
| commit | 766f9ed028c757561b99e4ed5aa487d381fe80a3 (patch) | |
| tree | bdbeb748f2a88a47f6b246ffa1a72cd6c0da4689 | |
| parent | 62ac2527732a01dfa6bd2c9523215c0ba3816641 (diff) | |
Migrated util.go and main.go to the new pkgui convention and C file. Also replaced C.CBytes() with C.malloc() (this bumps our minimum version requirement to 1.8, but it's better than keeping a massive slice around at all times).
| -rw-r--r-- | BBB_GOFILES/util.go | 45 | ||||
| -rw-r--r-- | main.go (renamed from BBB_GOFILES/main.go) | 25 | ||||
| -rw-r--r-- | pkgui.c | 23 | ||||
| -rw-r--r-- | pkgui.h | 9 | ||||
| -rw-r--r-- | util.go | 31 | ||||
| -rw-r--r-- | util.h | 3 | 
6 files changed, 73 insertions, 63 deletions
diff --git a/BBB_GOFILES/util.go b/BBB_GOFILES/util.go deleted file mode 100644 index bcd4d33..0000000 --- a/BBB_GOFILES/util.go +++ /dev/null @@ -1,45 +0,0 @@ -// 12 december 2015 - -package ui - -import ( -	"unsafe" -) - -// #include <stdlib.h> -// #include "util.h" -import "C" - -// We want Go itself to complain when we're out of memory. -// The allocators in cgo *should* do this, but there isn't a -// C.CMalloc(). There *is* a C.CBytes(), however, for transferring -// binary blobs from Go to C. If we pass this an arbitrary slice -// of the desired length, we get our C.CMalloc(). Using a slice -// that's always initialized to zero gives us the memset(0) -// (or ZeroMemory()) for free. -var allocBytes = make([]byte, 1024)		// 1024 bytes first - -//export pkguiAlloc -func pkguiAlloc(n C.size_t) unsafe.Pointer { -	if n > C.size_t(len(allocBytes)) { -		// TODO round n up to a multiple of a power of 2? -		// for instance 0x1234 bytes -> 0x1800 bytes -		allocBytes = make([]byte, n) -	} -	return C.CBytes(allocBytes[:n]) -} - -func freestr(str *C.char) { -	C.free(unsafe.Pointer(str)) -} - -func tobool(b C.int) bool { -	return b != 0 -} - -func frombool(b bool) C.int { -	if b { -		return 1 -	} -	return 0 -} diff --git a/BBB_GOFILES/main.go b/main.go index 6500345..356e0e8 100644 --- a/BBB_GOFILES/main.go +++ b/main.go @@ -9,12 +9,7 @@ import (  	"unsafe"  ) -// #include "ui.h" -// extern void doQueueMain(void *); -// extern int doOnShouldQuit(void *); -// // see golang/go#19835 -// typedef void (*queueMainCallback)(void *); -// typedef int (*onShouldQuitCallback)(void *); +// #include "pkgui.h"  import "C"  // make sure main() runs on the first thread created by the OS @@ -33,15 +28,15 @@ func init() {  // nil. If package ui fails to initialize, Main returns an appropriate  // error.  func Main(f func()) error { -	// TODO HEAP SAFETY -	opts := C.uiInitOptions{} -	estr := C.uiInit(&opts) +	opts := C.pkguiAllocInitOptions() +	estr := C.uiInit(opts) +	C.pkguiFreeInitOptions(opts)  	if estr != nil {  		err := errors.New(C.GoString(estr))  		C.uiFreeInitError(estr)  		return err  	} -	C.uiOnShouldQuit(C.onShouldQuitCallback(C.doOnShouldQuit), nil) +	C.pkguiOnShouldQuit()  	QueueMain(f)  	C.uiMain()  	return nil @@ -90,11 +85,11 @@ func QueueMain(f func()) {  		}  	}  	qmmap[n] = f -	C.uiQueueMain(C.queueMainCallback(C.doQueueMain), unsafe.Pointer(n)) +	C.pkguiQueueMain(C.uintptr_t(n))  } -//export doQueueMain -func doQueueMain(nn unsafe.Pointer) { +//export pkguiDoQueueMain +func pkguiDoQueueMain(nn unsafe.Pointer) {  	qmlock.Lock()  	n := uintptr(nn) @@ -121,8 +116,8 @@ func OnShouldQuit(f func() bool) {  	shouldQuitFunc = f  } -//export doOnShouldQuit -func doOnShouldQuit(unused unsafe.Pointer) C.int { +//export pkguiDoOnShouldQuit +func pkguiDoOnShouldQuit(unused unsafe.Pointer) C.int {  	if shouldQuitFunc == nil {  		return 0  	} @@ -0,0 +1,23 @@ +// 26 august 2018 +#include "pkgui.h" +#include "xxxxx" + +uiInitOptions *pkguiAllocInitOptions(void) +{ +	return (uiInitOptions *) pkguiAlloc(sizeof (uiInitOptions)); +} + +void pkguiFreeInitOptions(uiInitOptions *o) +{ +	free(o); +} + +void pkguiQueueMain(uintptr_t n) +{ +	uiQueueMain(pkguiDoQueueMain, (void *) n); +} + +void pkguiOnShouldQuit(void) +{ +	uiOnShouldQuit(pkguiDoOnShouldQuit, NULL); +} @@ -0,0 +1,9 @@ +// 12 august 2018 +#include <stdio.h> +#include "ui.h" + +// main.go +extern uiInitOptions *pkguiAllocInitOptions(void); +extern void pkguiFreeInitOptions(uiInitOptions *o); +extern void pkguiQueueMain(uintptr_t n); +extern void pkguiOnShouldQuit(void); @@ -0,0 +1,31 @@ +// 12 december 2015 + +package ui + +import ( +	"unsafe" +) + +// #include "pkgui.h" +import "C" + +//export pkguiAlloc +func pkguiAlloc(n C.size_t) unsafe.Pointer { +	// cgo turns C.malloc() into a panic-on-OOM version; use it +	return C.malloc(n) +} + +func freestr(str *C.char) { +	C.free(unsafe.Pointer(str)) +} + +func tobool(b C.int) bool { +	return b != 0 +} + +func frombool(b bool) C.int { +	if b { +		return 1 +	} +	return 0 +} @@ -1,3 +0,0 @@ -// 12 august 2018 - -extern void *pkguiAlloc(size_t);  | 
