forked from themakers/gphoto2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cgo.go
37 lines (29 loc) · 720 Bytes
/
cgo.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package gphoto2
// #include <stdlib.h>
import "C"
import "unsafe"
type freeFunc func()
func goString(charPtr *C.char) string {
return C.GoString((*C.char)(charPtr))
}
func cString(str string) (*C.char, freeFunc) {
c_str := C.CString(str)
return c_str, func() {
C.free(unsafe.Pointer(c_str))
}
}
func goBytes(charPtr *C.char, size int) []byte {
return C.GoBytes(unsafe.Pointer(charPtr), C.int(size))
}
func cBytes(bytes []byte) (*C.char, freeFunc) {
c_bytes := C.CBytes(bytes)
return (*C.char)(c_bytes), func() {
C.free(unsafe.Pointer(c_bytes))
}
}
func cMalloc(size int) (*C.char, freeFunc) {
c_buf := (*C.char)(C.malloc(C.size_t(size)))
return c_buf, func() {
C.free(unsafe.Pointer(c_buf))
}
}