realloc.c (568B)
1 /* 2 * realloc.c - reallocate memory block 3 * Copyright (C) 2026. All rights reserved. 4 */ 5 6 #include "libc.h" 7 8 void* realloc(void *ptr, size_t size) { 9 if (ptr == NULL) { 10 return malloc(size); 11 } 12 if (size == 0) { 13 free(ptr); 14 return NULL; 15 } 16 17 block_header_t *header = (block_header_t*)ptr - 1; 18 size_t old_size = header->requested_size; 19 20 if (old_size >= size) { 21 header->requested_size = size; 22 return ptr; 23 } 24 25 void *new_ptr = malloc(size); 26 if (new_ptr != NULL) { 27 memcpy(new_ptr, ptr, old_size); 28 free(ptr); 29 } 30 return new_ptr; 31 }