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