string: fix prototype of memdup()

It doesn't make sense to restrict memdup() to only return char*
pointers, especially when it is already defined to accept void*. This
makes it uglier to use to e.g. duplicate a struct.

Make it return void*, just as kmemdup() does in the kernel (and which
our kmemdup() in fact also does).

While in here, make a small optimization: memcpy() is defined to
return the destination register, so we write this in a way that the
compiler may do a tail call.

Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Rasmus Villemoes <ravi@prevas.dk>
This commit is contained in:
Rasmus Villemoes
2026-04-21 09:54:31 +02:00
committed by Tom Rini
parent bbc04206b5
commit ca1c292d2e
2 changed files with 4 additions and 6 deletions

View File

@@ -142,7 +142,7 @@ void *memchr_inv(const void *, int, size_t);
* memory is available
*
*/
char *memdup(const void *src, size_t len);
void *memdup(const void *src, size_t len);
unsigned long ustrtoul(const char *cp, char **endp, unsigned int base);
unsigned long long ustrtoull(const char *cp, char **endp, unsigned int base);

View File

@@ -667,17 +667,15 @@ void * memscan(void * addr, int c, size_t size)
}
#endif
char *memdup(const void *src, size_t len)
void *memdup(const void *src, size_t len)
{
char *p;
void *p;
p = malloc(len);
if (!p)
return NULL;
memcpy(p, src, len);
return p;
return memcpy(p, src, len);
}
#ifndef __HAVE_ARCH_STRNSTR