12345678910111213141516171819202122232425262728293031323334 |
- // 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);
|