// NewBpfModule constructor func newBpfModule(code string, cflags []string) *BpfModule { //Debug.Println("Creating BpfModule from string") cflagsC := make([]*C.char, len(defaultCflags)+len(cflags)) defer func() { for _, cflag := range cflagsC { C.free(unsafe.Pointer(cflag)) } }() for i, cflag := range cflags { cflagsC[i] = C.CString(cflag) } for i, cflag := range defaultCflags { cflagsC[len(cflags)+i] = C.CString(cflag) } cs := C.CString(code) defer C.free(unsafe.Pointer(cs)) c := C.bpf_module_create_c_from_string(cs, 2, (**C.char)(&cflagsC[0]), C.int(len(cflagsC))) if c == nil { return nil } return &BpfModule{ p: c, funcs: make(map[string]int), kprobes: make(map[string]unsafe.Pointer), } }
// NewBpfModule constructor func NewBpfModule(code string, cflags []string) *BpfModule { Debug.Println("Creating BpfModule from string") cflagsC := make([]*C.char, len(cflags)) for i, cflag := range cflags { cs := C.CString(cflag) cflagsC[i] = cs defer C.free(unsafe.Pointer(cs)) } var cflagsP **C.char if len(cflagsC) > 0 { cflagsP = (**C.char)(&cflagsC[0]) } cs := C.CString(code) defer C.free(unsafe.Pointer(cs)) c := C.bpf_module_create_c_from_string(cs, 0, cflagsP, C.int(len(cflagsC))) if c == nil { return nil } return &BpfModule{ p: c, funcs: make(map[string]int), } }