string.go 457 B

12345678910111213141516171819202122232425
  1. package cgohelper
  2. /*
  3. #include <stdlib.h>
  4. */
  5. import "C"
  6. import "unsafe"
  7. func CreateStringAllocator() (func(string) unsafe.Pointer, func()) {
  8. var allocated = make([] *C.char, 0)
  9. var allocate = func(str string) unsafe.Pointer {
  10. var ptr = C.CString(str)
  11. allocated = append(allocated, ptr)
  12. return unsafe.Pointer(ptr)
  13. }
  14. var deallocate = func() {
  15. for _, ptr := range allocated {
  16. C.free(unsafe.Pointer(ptr))
  17. }
  18. }
  19. return allocate, deallocate
  20. }