70 size_t mm_try_join(
size_t *ptr) {
71 size_t *next=ptr+*ptr+1;
74 while(*next==
MM_FREE && next>=&mm_start) {
78 return (*ptr)+=increase;
89 while(ptr >= &mm_start) {
103 void mm_update_first_free(
size_t *start) {
106 while((*ptr!=
MM_FREE) && (ptr>=&mm_start))
117 size_t *current,*next;
134 *current=(int)(((-(
int) current)-2)>>1);
136 mm_update_first_free(&mm_start);
144 void *
malloc(
size_t size) {
154 while(ptr>=&mm_start) {
160 *(ptr-1)=(
size_t)
ctid;
173 if(ptr==mm_first_free+1)
174 mm_update_first_free(ptr+*ptr+1);
179 return (
void*) (ptr+1);
198 void free(
void *the_ptr) {
204 if(ptr==
NULL || (((
size_t)ptr)&1) )
217 if(ptr<mm_first_free || mm_first_free<&mm_start)
232 if(ptr<mm_first_free || mm_first_free<&mm_start)
233 mm_update_first_free(ptr);
243 void *
calloc(
size_t nmemb,
size_t size) {
245 size_t original_size = size;
247 if (nmemb == 0 || size == 0)
253 if (size/nmemb != original_size)
270 while(ptr>=&mm_start) {
271 if(*ptr==(
size_t)ctid)
291 for (ptr = mm_first_free;