libc

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

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 }