libc/minimal: fix realloc() failure case
It is said that the C17 realloc() behavior is to return the original pointer on error and that's what is implemented here. This may be confused with a successful realloc() and nobody else does that. Instead, a failed realloc() should return NULL, leave the original memory intact and set errno to ENOMEM. This is the behavior described by all the following references: Linux/glibc: https://man7.org/linux/man-pages/man3/malloc.3.html NetBSD https://man.netbsd.org/realloc.3 Microsoft https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/realloc Mac OS X https://developer.apple.com/library/archive/documentation/System/\ Conceptual/ManPages_iPhoneOS/man3/reallocf.3.html Open Group Base Specifications Issue 6 https://pubs.opengroup.org/onlinepubs/009604599/functions/realloc.html PTC MKS Toolkit https://www.mkssoftware.com/docs/man3/realloc.3.asp Let's get in line with the most common behavior. Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
This commit is contained in:
parent
593997046b
commit
47de5a0591
1 changed files with 4 additions and 1 deletions
|
@ -60,7 +60,10 @@ void *realloc(void *ptr, size_t requested_size)
|
|||
__alignof__(z_max_align_t),
|
||||
requested_size);
|
||||
|
||||
return ret == NULL ? ptr : ret;
|
||||
if (ret == NULL && requested_size != 0) {
|
||||
errno = ENOMEM;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void free(void *ptr)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue