/** * @file realloc.c * @brief realloc implementation. */ #include "libft.h" #include "malloc.h" #include "malloc_internal.h" static t_chunk * _s_ptr_to_chunk (void *ptr) { return ((t_chunk *)((char *)ptr - ALIGN (sizeof (t_chunk)))); } void * realloc (void *ptr, size_t size) { t_chunk *chunk; void *new_ptr; size_t copy_size; if (!ptr) return (malloc (size)); if (size == 0) { free (ptr); return (NULL); } chunk = _s_ptr_to_chunk (ptr); if (chunk->size >= ALIGN (size)) return (ptr); new_ptr = malloc (size); if (!new_ptr) return (NULL); copy_size = chunk->size; if (copy_size > size) copy_size = size; ft_memcpy (new_ptr, ptr, copy_size); free (ptr); return (new_ptr); }