powerpc/prom_init: Convert prom_strcpy() into prom_strscpy_pad()

In a subsequent patch we'd like to have something like a strscpy_pad()
implementation usable in prom_init.c.

Currently we have a strcpy() implementation with only one caller, so
convert it into strscpy_pad() and update the caller.

Reviewed-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210621064938.2021419-1-mpe@ellerman.id.au
This commit is contained in:
Michael Ellerman 2021-06-21 16:49:37 +10:00
parent 3018fbc636
commit f47d5a4fc2
1 changed files with 24 additions and 6 deletions

View File

@ -242,13 +242,31 @@ static int __init prom_strcmp(const char *cs, const char *ct)
return 0;
}
static char __init *prom_strcpy(char *dest, const char *src)
static ssize_t __init prom_strscpy_pad(char *dest, const char *src, size_t n)
{
char *tmp = dest;
ssize_t rc;
size_t i;
while ((*dest++ = *src++) != '\0')
/* nothing */;
return tmp;
if (n == 0 || n > INT_MAX)
return -E2BIG;
// Copy up to n bytes
for (i = 0; i < n && src[i] != '\0'; i++)
dest[i] = src[i];
rc = i;
// If we copied all n then we have run out of space for the nul
if (rc == n) {
// Rewind by one character to ensure nul termination
i--;
rc = -E2BIG;
}
for (; i < n; i++)
dest[i] = '\0';
return rc;
}
static int __init prom_strncmp(const char *cs, const char *ct, size_t count)
@ -2701,7 +2719,7 @@ static void __init flatten_device_tree(void)
/* Add "phandle" in there, we'll need it */
namep = make_room(&mem_start, &mem_end, 16, 1);
prom_strcpy(namep, "phandle");
prom_strscpy_pad(namep, "phandle", sizeof("phandle"));
mem_start = (unsigned long)namep + prom_strlen(namep) + 1;
/* Build string array */