Skip to content

Commit

Permalink
powerpc/prom_init: Convert prom_strcpy() into prom_strscpy_pad()
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Michael Ellerman <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
  • Loading branch information
mpe committed Jun 24, 2021
1 parent 3018fbc commit f47d5a4
Showing 1 changed file with 24 additions and 6 deletions.
30 changes: 24 additions & 6 deletions arch/powerpc/kernel/prom_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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 */
Expand Down

0 comments on commit f47d5a4

Please sign in to comment.