mirror of
https://github.com/netdata/libbpf.git
synced 2026-03-29 12:49:07 +08:00
libbpf: Remove any use of reallocarray() in libbpf
Re-implement glibc's reallocarray() for libbpf internal-only use. reallocarray(), unfortunately, is not available in all versions of glibc, so requires extra feature detection and using reallocarray() stub from <tools/libc_compat.h> and COMPAT_NEED_REALLOCARRAY. All this complicates build of libbpf unnecessarily and is just a maintenance burden. Instead, it's trivial to implement libbpf-specific internal version and use it throughout libbpf. Which is what this patch does, along with converting some realloc() uses that should really have been reallocarray() in the first place. Signed-off-by: Andrii Nakryiko <andriin@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/20200819013607.3607269-2-andriin@fb.com
This commit is contained in:
committed by
Andrii Nakryiko
parent
9106c3028b
commit
dc70da9c70
11
src/btf.c
11
src/btf.c
@@ -61,7 +61,7 @@ static int btf_add_type(struct btf *btf, struct btf_type *t)
|
||||
expand_by = max(btf->types_size >> 2, 16U);
|
||||
new_size = min(BTF_MAX_NR_TYPES, btf->types_size + expand_by);
|
||||
|
||||
new_types = realloc(btf->types, sizeof(*new_types) * new_size);
|
||||
new_types = libbpf_reallocarray(btf->types, new_size, sizeof(*new_types));
|
||||
if (!new_types)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -1574,7 +1574,7 @@ static int btf_dedup_hypot_map_add(struct btf_dedup *d,
|
||||
__u32 *new_list;
|
||||
|
||||
d->hypot_cap += max((size_t)16, d->hypot_cap / 2);
|
||||
new_list = realloc(d->hypot_list, sizeof(__u32) * d->hypot_cap);
|
||||
new_list = libbpf_reallocarray(d->hypot_list, d->hypot_cap, sizeof(__u32));
|
||||
if (!new_list)
|
||||
return -ENOMEM;
|
||||
d->hypot_list = new_list;
|
||||
@@ -1870,8 +1870,7 @@ static int btf_dedup_strings(struct btf_dedup *d)
|
||||
struct btf_str_ptr *new_ptrs;
|
||||
|
||||
strs.cap += max(strs.cnt / 2, 16U);
|
||||
new_ptrs = realloc(strs.ptrs,
|
||||
sizeof(strs.ptrs[0]) * strs.cap);
|
||||
new_ptrs = libbpf_reallocarray(strs.ptrs, strs.cap, sizeof(strs.ptrs[0]));
|
||||
if (!new_ptrs) {
|
||||
err = -ENOMEM;
|
||||
goto done;
|
||||
@@ -2956,8 +2955,8 @@ static int btf_dedup_compact_types(struct btf_dedup *d)
|
||||
d->btf->nr_types = next_type_id - 1;
|
||||
d->btf->types_size = d->btf->nr_types;
|
||||
d->btf->hdr->type_len = p - types_start;
|
||||
new_types = realloc(d->btf->types,
|
||||
(1 + d->btf->nr_types) * sizeof(struct btf_type *));
|
||||
new_types = libbpf_reallocarray(d->btf->types, (1 + d->btf->nr_types),
|
||||
sizeof(struct btf_type *));
|
||||
if (!new_types)
|
||||
return -ENOMEM;
|
||||
d->btf->types = new_types;
|
||||
|
||||
Reference in New Issue
Block a user