github.com/secoba/wails/v2@v2.6.4/internal/frontend/desktop/linux/calloc.go (about)

     1  //go:build linux
     2  // +build linux
     3  
     4  package linux
     5  
     6  /*
     7  #include <stdlib.h>
     8  */
     9  import "C"
    10  import "unsafe"
    11  
    12  // Calloc handles alloc/dealloc of C data
    13  type Calloc struct {
    14  	pool []unsafe.Pointer
    15  }
    16  
    17  // NewCalloc creates a new allocator
    18  func NewCalloc() Calloc {
    19  	return Calloc{}
    20  }
    21  
    22  // String creates a new C string and retains a reference to it
    23  func (c Calloc) String(in string) *C.char {
    24  	result := C.CString(in)
    25  	c.pool = append(c.pool, unsafe.Pointer(result))
    26  	return result
    27  }
    28  
    29  // Free frees all allocated C memory
    30  func (c Calloc) Free() {
    31  	for _, str := range c.pool {
    32  		C.free(str)
    33  	}
    34  	c.pool = []unsafe.Pointer{}
    35  }