func (h *Hypervisor) ListNetworkFilters(flags uint) ([]*NetworkFilter, error) { var cfilters *C.virNWFilterPtr result := C.virConnectListAllNWFilters(h.cptr, &cfilters, C.uint(flags)) if result == -1 { return nil, GetLastError() } var filters = make([]*NetworkFilter, result) p := (*[1 << 30]C.virNWFilterPtr)(unsafe.Pointer(cfilters)) for i := 0; i < int(result); i++ { filters[i] = newNetworkFilter(p[i]) } defer C.free(unsafe.Pointer(cfilters)) return filters, nil }
func (c *VirConnection) ListAllNWFilters(flags uint32) ([]VirNWFilter, error) { var cList *C.virNWFilterPtr numNWFilters := C.virConnectListAllNWFilters(c.ptr, (**C.virNWFilterPtr)(&cList), C.uint(flags)) if numNWFilters == -1 { return nil, GetLastError() } hdr := reflect.SliceHeader{ Data: uintptr(unsafe.Pointer(cList)), Len: int(numNWFilters), Cap: int(numNWFilters), } var filters []VirNWFilter slice := *(*[]C.virNWFilterPtr)(unsafe.Pointer(&hdr)) for _, ptr := range slice { filters = append(filters, VirNWFilter{ptr}) } C.free(unsafe.Pointer(cList)) return filters, nil }