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/blenloader | |
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/blenloader')
-rw-r--r-- | source/blender/blenloader/BLO_readfile.h | 7 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 15 |
2 files changed, 17 insertions, 5 deletions
diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h index 52b8d15b987..e6fc4703248 100644 --- a/source/blender/blenloader/BLO_readfile.h +++ b/source/blender/blenloader/BLO_readfile.h @@ -74,9 +74,12 @@ typedef struct BlendFileData { /* skip reading some data-block types (may want to skip screen data too). */ typedef enum eBLOReadSkip { - BLO_READ_SKIP_NONE = 0, - BLO_READ_SKIP_USERDEF = (1 << 0), + BLO_READ_SKIP_NONE = 0, + BLO_READ_SKIP_USERDEF = (1 << 0), + BLO_READ_SKIP_DATA = (1 << 1), } eBLOReadSkip; +#define BLO_READ_SKIP_ALL \ + (BLO_READ_SKIP_USERDEF | BLO_READ_SKIP_DATA) BlendFileData *BLO_read_from_file( const char *filepath, diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 91c96aef8e8..0aa53dbe633 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -8611,15 +8611,24 @@ BlendFileData *blo_read_file_internal(FileData *fd, const char *filepath) case ID_ID: /* Always adds to the most recently loaded ID_LI block, see direct_link_library. * This is part of the file format definition. */ - bhead = read_libblock(fd, mainlist.last, bhead, LIB_TAG_READ | LIB_TAG_EXTERN, NULL); + if (fd->skip_flags & BLO_READ_SKIP_DATA) { + bhead = blo_nextbhead(fd, bhead); + } + else { + bhead = read_libblock(fd, mainlist.last, bhead, LIB_TAG_READ | LIB_TAG_EXTERN, NULL); + } break; - /* in 2.50+ files, the file identifier for screens is patched, forward compatibility */ case ID_SCRN: bhead->code = ID_SCR; /* deliberate pass on to default */ default: - bhead = read_libblock(fd, bfd->main, bhead, LIB_TAG_LOCAL, NULL); + if (fd->skip_flags & BLO_READ_SKIP_DATA) { + bhead = blo_nextbhead(fd, bhead); + } + else { + bhead = read_libblock(fd, bfd->main, bhead, LIB_TAG_LOCAL, NULL); + } } } |