// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) /* Copyright (c) 2022 Hengqi Chen */ #ifndef __COMPAT_H #define __COMPAT_H #include #include #include #include #define POLL_TIMEOUT_MS 100 struct bpf_buffer; struct bpf_map; typedef int (*bpf_buffer_sample_fn)(void *ctx, void *data, size_t size); typedef void (*bpf_buffer_lost_fn)(void *ctx, int cpu, __u64 cnt); struct bpf_buffer *bpf_buffer__new(struct bpf_map *events, struct bpf_map *heap); int bpf_buffer__open(struct bpf_buffer *buffer, bpf_buffer_sample_fn sample_cb, bpf_buffer_lost_fn lost_cb, void *ctx); int bpf_buffer__poll(struct bpf_buffer *, int timeout_ms); void bpf_buffer__free(struct bpf_buffer *); /* taken from libbpf */ #ifndef __has_builtin #define __has_builtin(x) 0 #endif static inline void *libbpf_reallocarray(void *ptr, size_t nmemb, size_t size) { size_t total; #if __has_builtin(__builtin_mul_overflow) if (__builtin_mul_overflow(nmemb, size, &total)) return NULL; #else if (size == 0 || nmemb > ULONG_MAX / size) return NULL; total = nmemb * size; #endif return realloc(ptr, total); } #endif /* __COMPAT_H */