struct PE_get_imports_info* PE_get_imports_info_deep_copy(struct PE_get_imports_info *i) { struct PE_get_imports_info *rt; rt=DMEMDUP (i, sizeof(struct PE_get_imports_info), "struct PE_get_imports_info"); for (int d=0; d < rt->import_descriptors_t; d++) { struct PE_get_imports_DLL_info* DLL_d=rt->dlls + d; struct PE_get_imports_DLL_info* DLL_s=i->dlls + d; DLL_d->DLL_name=DSTRDUP (DLL_s->DLL_name, "char*"); DLL_d->symbols_t=DLL_s->symbols_t; DLL_d->symbols=DCALLOC(char*, DLL_s->symbols_t, "char*"); for (int s=0; s<DLL_d->symbols_t; s++) { DLL_d->symbols[s]=DSTRDUP(DLL_s->symbols[s], "char*"); DLL_d->hints[s]=DLL_s->hints[s]; // can be optimized; }; DLL_d->allocate_thunks=DLL_s->allocate_thunks; }; return rt; };
static void* value_copier(void *v) { return DMEMDUP (v, sizeof(MemoryCacheElement), "MemoryCacheElement"); };