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); }
ci_service_module_t *add_service(ci_service_module_t *service) { struct ci_service_xdata *xdata=NULL; struct ci_conf_entry *cfg_table; if (service_list == NULL) { service_list_size = STEP; service_list = malloc(service_list_size * sizeof(ci_service_module_t *)); service_extra_data_list = malloc(service_list_size * sizeof(ci_service_xdata_t)); } else if (services_num == service_list_size) { service_list_size += STEP; service_list = realloc(service_list, service_list_size * sizeof(ci_service_module_t *)); service_extra_data_list = realloc(service_extra_data_list, service_list_size * sizeof(ci_service_xdata_t)); } if (service_list == NULL || service_extra_data_list == NULL) { ci_debug_printf(1, "Fatal error: Cannot allocate memory! Exiting immediately!\n"); exit(-1); } xdata = &service_extra_data_list[services_num]; init_extra_data(xdata, service->mod_name); if (service->mod_init_service) service->mod_init_service(xdata, &CONF); service_list[services_num++] = service; cfg_table = create_service_conf_table(xdata, service->mod_conf_table); xdata->intl_srv_conf_table = cfg_table; if (cfg_table) register_conf_table(service->mod_name, cfg_table, MAIN_TABLE); return service; }
void *my_malloc(size_t size, char *file, int line){ byte *ptr; init_extra_data(); size+=2*EXTRA_BYTE; ptr = malloc(size); if(get_verbose_level()>=DEBUG) printf("my_malloc of size %ld: %p (%s: %d)\n",size-2*EXTRA_BYTE,(void*)ptr,file,line); save_size(ptr,size); memcpy(ptr, extra_data, EXTRA_BYTE); memcpy(ptr + size - EXTRA_BYTE, extra_data, EXTRA_BYTE); if(get_verbose_level()>=DEBUG) printf("my_malloc returning: %p\n",(void*)(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,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",ptr+EXTRA_BYTE); return (void *)(ptr+EXTRA_BYTE); }