From d4d8da28fce479d01d2910f4acc9e849621807d9 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 17 Mar 2017 07:01:11 +1100 Subject: Add BKE_blendfile_userdef_read_from_memory Needed to read user-preferences from in-memory startup.blend Also skip data-blocks when reading preferences. --- source/blender/blenkernel/intern/blendfile.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'source/blender/blenkernel/intern/blendfile.c') diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c index c549c138ef2..5725a12e3d4 100644 --- a/source/blender/blenkernel/intern/blendfile.c +++ b/source/blender/blenkernel/intern/blendfile.c @@ -430,7 +430,7 @@ UserDef *BKE_blendfile_userdef_read(const char *filepath, ReportList *reports) BlendFileData *bfd; UserDef *userdef = NULL; - bfd = BLO_read_from_file(filepath, reports, BLO_READ_SKIP_NONE); + bfd = BLO_read_from_file(filepath, reports, BLO_READ_SKIP_ALL & ~BLO_READ_SKIP_USERDEF); if (bfd) { if (bfd->user) { userdef = bfd->user; @@ -442,6 +442,30 @@ UserDef *BKE_blendfile_userdef_read(const char *filepath, ReportList *reports) return userdef; } + +UserDef *BKE_blendfile_userdef_read_from_memory( + const void *filebuf, int filelength, + ReportList *reports) +{ + BlendFileData *bfd; + UserDef *userdef = NULL; + + bfd = BLO_read_from_memory(filebuf, filelength, reports, BLO_READ_SKIP_ALL & ~BLO_READ_SKIP_USERDEF); + if (bfd) { + if (bfd->user) { + userdef = bfd->user; + } + BKE_main_free(bfd->main); + MEM_freeN(bfd); + } + else { + BKE_reports_prepend(reports, "Loading failed: "); + } + + return userdef; +} + + /* only write the userdef in a .blend */ int BKE_blendfile_userdef_write(const char *filepath, ReportList *reports) { -- cgit v1.2.3