diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-03-16 23:01:11 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-03-16 23:01:48 +0300 |
commit | d4d8da28fce479d01d2910f4acc9e849621807d9 (patch) | |
tree | 5ac4c212ff24345047c38c3b1abd1c25f8bbbdcc /source/blender/blenkernel/intern/blendfile.c | |
parent | b2d3956e7b497bd6d5467113bfd76614f5188ae0 (diff) |
Add BKE_blendfile_userdef_read_from_memory
Needed to read user-preferences from in-memory startup.blend
Also skip data-blocks when reading preferences.
Diffstat (limited to 'source/blender/blenkernel/intern/blendfile.c')
-rw-r--r-- | source/blender/blenkernel/intern/blendfile.c | 26 |
1 files changed, 25 insertions, 1 deletions
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) { |