* Free list with index i contains blocks of size 2^(i+3) including header.
* Free list with index i contains blocks of size * 2 ^ (i + * LOG2_MIN_SIZE) including header.
realloc(old_base, new_size)        void *old_base;        size_t new_size;{	register header_t h;	register free_list_t fl;	register int i;	unsigned int old_size;	char *new_base;	if (old_base == 0)	  return malloc (new_size);	/*	 * Find size of old block.	 */	h = (header_t) (old_base - sizeof(union header));	fl = h->fl;	i = fl - malloc_free_list;	/*	 * Sanity checks.	 */	if (i < 0 || i >= NBUCKETS) {		ASSERT(0 <= i && i < NBUCKETS);		return 0;	}	if (fl != &malloc_free_list[i]) {		ASSERT(fl == &malloc_free_list[i]);		return 0;	}	/*	 * Free list with index i contains blocks of size 2^(i+3) including header.	 */	old_size = (1 << (i+3)) - sizeof(union header);	/*	 * Allocate new block, copy old bytes, and free old block.	 */	new_base = malloc(new_size);	if (new_base != 0)		bcopy(old_base, new_base, (int) (old_size < new_size ? old_size : new_size));	free(old_base);	return new_base;}