/* memfile is the undo buffer */ int BKE_read_file_from_memfile(bContext *C, MemFile *memfile, ReportList *reports) { BlendFileData *bfd; bfd = BLO_read_from_memfile(CTX_data_main(C), G.main->name, memfile, reports); if (bfd) { /* remove the unused screens and wm */ while (bfd->main->wm.first) BKE_libblock_free_ex(bfd->main, bfd->main->wm.first, true); while (bfd->main->screen.first) BKE_libblock_free_ex(bfd->main, bfd->main->screen.first, true); setup_app_data(C, bfd, "<memory1>"); } else BKE_reports_prepend(reports, "Loading failed: "); return (bfd ? 1 : 0); }
void BKE_libblock_free(Main *bmain, void *idv) { BKE_libblock_free_ex(bmain, idv, true); }
void BKE_main_free(Main *mainvar) { /* also call when reading a file, erase all, etc */ ListBase *lbarray[MAX_LIBARRAY]; int a; a = set_listbasepointers(mainvar, lbarray); while (a--) { ListBase *lb = lbarray[a]; ID *id; while ( (id = lb->first) ) { #if 1 BKE_libblock_free_ex(mainvar, id, false); #else /* errors freeing ID's can be hard to track down, * enable this so valgrind will give the line number in its error log */ switch (a) { case 0: BKE_libblock_free_ex(mainvar, id, false); break; case 1: BKE_libblock_free_ex(mainvar, id, false); break; case 2: BKE_libblock_free_ex(mainvar, id, false); break; case 3: BKE_libblock_free_ex(mainvar, id, false); break; case 4: BKE_libblock_free_ex(mainvar, id, false); break; case 5: BKE_libblock_free_ex(mainvar, id, false); break; case 6: BKE_libblock_free_ex(mainvar, id, false); break; case 7: BKE_libblock_free_ex(mainvar, id, false); break; case 8: BKE_libblock_free_ex(mainvar, id, false); break; case 9: BKE_libblock_free_ex(mainvar, id, false); break; case 10: BKE_libblock_free_ex(mainvar, id, false); break; case 11: BKE_libblock_free_ex(mainvar, id, false); break; case 12: BKE_libblock_free_ex(mainvar, id, false); break; case 13: BKE_libblock_free_ex(mainvar, id, false); break; case 14: BKE_libblock_free_ex(mainvar, id, false); break; case 15: BKE_libblock_free_ex(mainvar, id, false); break; case 16: BKE_libblock_free_ex(mainvar, id, false); break; case 17: BKE_libblock_free_ex(mainvar, id, false); break; case 18: BKE_libblock_free_ex(mainvar, id, false); break; case 19: BKE_libblock_free_ex(mainvar, id, false); break; case 20: BKE_libblock_free_ex(mainvar, id, false); break; case 21: BKE_libblock_free_ex(mainvar, id, false); break; case 22: BKE_libblock_free_ex(mainvar, id, false); break; case 23: BKE_libblock_free_ex(mainvar, id, false); break; case 24: BKE_libblock_free_ex(mainvar, id, false); break; case 25: BKE_libblock_free_ex(mainvar, id, false); break; case 26: BKE_libblock_free_ex(mainvar, id, false); break; case 27: BKE_libblock_free_ex(mainvar, id, false); break; case 28: BKE_libblock_free_ex(mainvar, id, false); break; case 29: BKE_libblock_free_ex(mainvar, id, false); break; case 30: BKE_libblock_free_ex(mainvar, id, false); break; case 31: BKE_libblock_free_ex(mainvar, id, false); break; case 32: BKE_libblock_free_ex(mainvar, id, false); break; default: BLI_assert(0); break; } #endif } } MEM_freeN(mainvar->eval_ctx); MEM_freeN(mainvar); }