Files
Linux_Drivers/linux_5.10/lib/memcat_p.c
sam.xiang 5c7dd7acc3 [linux] create linux_5.10.4 from T-head official:
repo: https://github.com/T-head-Semi/linux
	commit: b1313fe517ca3703119dcc99ef3bbf75ab42bcfb

Change-Id: I6cbb35294024ea3a66140e311f4bb705fd7fd626
2023-03-10 20:32:41 +08:00

35 lines
753 B
C

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