Blame view
lib/memcat_p.c
753 Bytes
93048c094 lib: Fix ia64 boo... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
// SPDX-License-Identifier: GPL-2.0 #include <linux/slab.h> /* * Merge two NULL-terminated pointer arrays into a newly allocated * array, which is also NULL-terminated. Nomenclature is inspired by * memset_p() and memcat() found elsewhere in the kernel source tree. */ void **__memcat_p(void **a, void **b) { void **p = a, **new; int nr; /* count the elements in both arrays */ for (nr = 0, p = a; *p; nr++, p++) ; for (p = b; *p; nr++, p++) ; /* one for the NULL-terminator */ nr++; new = kmalloc_array(nr, sizeof(void *), GFP_KERNEL); if (!new) return NULL; /* nr -> last index; p points to NULL in b[] */ for (nr--; nr >= 0; nr--, p = p == b ? &a[nr] : p - 1) new[nr] = *p; return new; } EXPORT_SYMBOL_GPL(__memcat_p); |