diff options
Diffstat (limited to 'libc/stdlib')
-rw-r--r-- | libc/stdlib/malloc-standard/malloc.c | 1 | ||||
-rw-r--r-- | libc/stdlib/malloc-standard/reallocarray.c | 36 | ||||
-rw-r--r-- | libc/stdlib/malloc/memalign.c | 6 | ||||
-rw-r--r-- | libc/stdlib/random.c | 14 |
4 files changed, 50 insertions, 7 deletions
diff --git a/libc/stdlib/malloc-standard/malloc.c b/libc/stdlib/malloc-standard/malloc.c index 1f898eb29..cecea87ec 100644 --- a/libc/stdlib/malloc-standard/malloc.c +++ b/libc/stdlib/malloc-standard/malloc.c @@ -176,6 +176,7 @@ void __do_check_remalloced_chunk(mchunkptr p, size_t s) size_t sz = p->size & ~PREV_INUSE; #endif + (void)s; __do_check_inuse_chunk(p); /* Legal size ... */ diff --git a/libc/stdlib/malloc-standard/reallocarray.c b/libc/stdlib/malloc-standard/reallocarray.c new file mode 100644 index 000000000..e4044c3f5 --- /dev/null +++ b/libc/stdlib/malloc-standard/reallocarray.c @@ -0,0 +1,36 @@ +/* +Copyright © 2005-2020 Rich Felker, et al. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#define _BSD_SOURCE +#include <errno.h> +#include <stdlib.h> + +void *reallocarray(void *ptr, size_t m, size_t n) +{ + if (n && m > -1 / n) { + errno = ENOMEM; + return 0; + } + + return realloc(ptr, m * n); +} diff --git a/libc/stdlib/malloc/memalign.c b/libc/stdlib/malloc/memalign.c index 665f20cfb..54f6dbc6c 100644 --- a/libc/stdlib/malloc/memalign.c +++ b/libc/stdlib/malloc/memalign.c @@ -11,6 +11,7 @@ * Written by Miles Bader <miles@gnu.org> */ +#include <errno.h> #include <stdlib.h> #include <unistd.h> #include <sys/mman.h> @@ -38,6 +39,11 @@ memalign (size_t alignment, size_t size) unsigned long tot_addr, tot_end_addr, addr, end_addr; struct heap_free_area **heap = &__malloc_heap; + if (unlikely(size > PTRDIFF_MAX)) { + __set_errno(ENOMEM); + return NULL; + } + /* Make SIZE something we like. */ size = HEAP_ADJUST_SIZE (size); diff --git a/libc/stdlib/random.c b/libc/stdlib/random.c index b009c4310..05ce3fe84 100644 --- a/libc/stdlib/random.c +++ b/libc/stdlib/random.c @@ -139,8 +139,8 @@ static struct random_data unsafe_state = in the initialization of randtbl) because the state table pointer is set to point to randtbl[1] (as explained below).) */ - fptr : &randtbl[SEP_3 + 1], - rptr : &randtbl[1], + .fptr = &randtbl[SEP_3 + 1], + .rptr = &randtbl[1], /* The following things are the pointer to the state information table, the type of the current generator, the degree of the current polynomial @@ -152,13 +152,13 @@ static struct random_data unsafe_state = indexing every time to find the address of the last element to see if the front and rear pointers have wrapped. */ - state : &randtbl[1], + .state = &randtbl[1], - rand_type : TYPE_3, - rand_deg : DEG_3, - rand_sep : SEP_3, + .rand_type = TYPE_3, + .rand_deg = DEG_3, + .rand_sep = SEP_3, - end_ptr : &randtbl[sizeof (randtbl) / sizeof (randtbl[0])] + .end_ptr = &randtbl[sizeof (randtbl) / sizeof (randtbl[0])] }; |