libc

my libc
git clone git://git.evenfri.xyz/libc.git
Log | Files | Refs | README

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 }