void my_free(void *ptr){ byte *original_ptr = ((byte *)ptr) - EXTRA_BYTE; size_t size; if(!ptr) return; size = retreive_size(original_ptr); if((bcmp(original_ptr ,extra_data, EXTRA_BYTE)) && ((get_verbose_level()>=ERROR))){ fprintf(stderr,"cannot find special string ***before*** %p!\n",ptr); fprintf(stderr,"memory is probably corrupted here!\n"); } if((bcmp(original_ptr + size -EXTRA_BYTE ,extra_data, EXTRA_BYTE)) && ((get_verbose_level()>=ERROR))){ fprintf(stderr,"cannot find special string ***after*** %p!\n",ptr); fprintf(stderr,"memory is probably corrupted here!\n"); } if(get_verbose_level()>=DEBUG) printf("my_free freeing: %p\n",(void*)original_ptr); free(original_ptr); }
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); }