void *tm_realloc(void *old_ptr, size_t size, char *file, int line){ byte *ptr; size_t full_size; init_extra_data(); full_size = size + 2 * EXTRA_BYTE; ptr = malloc(full_size); save_ptr(ptr, full_size, file, line); if(tm_get_verbose_level()>=DEBUG) printf("tm_realloc of size %ld: %p (%s: %d)\n",full_size-2*EXTRA_BYTE,ptr, file, line); memcpy(ptr, extra_data, EXTRA_BYTE); memcpy(ptr + full_size - EXTRA_BYTE, extra_data, EXTRA_BYTE); if(old_ptr){ byte *original_ptr = ((byte *)old_ptr) - EXTRA_BYTE; size_t old_ptr_size = retreive_size(original_ptr); memcpy(ptr + EXTRA_BYTE, old_ptr, MIN(old_ptr_size - 2 * EXTRA_BYTE, size)); if((bcmp(original_ptr ,extra_data, EXTRA_BYTE)) && ((tm_get_verbose_level()>=ERROR))){ fprintf(stderr,"Realloc: cannot find special string ***before*** %p!\n", original_ptr); fprintf(stderr,"memory is probably corrupted here!\n"); } if((bcmp(original_ptr + old_ptr_size -EXTRA_BYTE ,extra_data, EXTRA_BYTE)) && ((tm_get_verbose_level()>=ERROR))){ fprintf(stderr,"Realloc: cannot find special string ***after*** %p!\n", original_ptr); fprintf(stderr,"memory is probably corrupted here!\n"); } if(tm_get_verbose_level()>=DEBUG) printf("tm_free freeing: %p\n",original_ptr); free(original_ptr); } if(tm_get_verbose_level()>=DEBUG) printf("tm_realloc returning: %p (----- %p)\n",ptr+EXTRA_BYTE, ((byte *)ptr) - EXTRA_BYTE); return (void *)(ptr+EXTRA_BYTE); }
void *tm_malloc(size_t size, char *file, int line){ byte *ptr; init_extra_data(); size+=2*EXTRA_BYTE; ptr = malloc(size); if(tm_get_verbose_level()>=DEBUG) printf("tm_malloc of size %ld: %p (%s: %d)\n",size-2*EXTRA_BYTE,ptr,file,line); save_ptr(ptr, size, file, line); memcpy(ptr, extra_data, EXTRA_BYTE); memcpy(ptr + size - EXTRA_BYTE, extra_data, EXTRA_BYTE); if(tm_get_verbose_level()>=DEBUG) printf("tm_malloc returning: %p\n",ptr+EXTRA_BYTE); return (void *)(ptr + EXTRA_BYTE); }
void *tm_calloc(size_t count, size_t size, char *file, int line){ byte *ptr; size_t full_size; init_extra_data(); full_size = count * size + 2 * EXTRA_BYTE; ptr = malloc(full_size); bzero(ptr,full_size); save_ptr(ptr, full_size, file, line); if(tm_get_verbose_level()>=DEBUG) printf("tm_calloc of size %ld: %p (%s: %d)\n",full_size-2*EXTRA_BYTE,(void*)ptr, file, line); memcpy(ptr, extra_data, EXTRA_BYTE); memcpy(ptr + full_size - EXTRA_BYTE, extra_data, EXTRA_BYTE); if(tm_get_verbose_level()>=DEBUG) printf("tm_calloc returning: %p\n", (void*)(ptr+EXTRA_BYTE)); return (void *)(ptr+EXTRA_BYTE); }