Blender V4.3
readfile.cc File Reference
#include <cctype>
#include <cerrno>
#include <climits>
#include <cstdarg>
#include <cstddef>
#include <cstdlib>
#include <ctime>
#include <fcntl.h>
#include "BLI_utildefines.h"
#include <unistd.h>
#include "CLG_log.h"
#include "fmt/format.h"
#include "DNA_anim_types.h"
#include "DNA_asset_types.h"
#include "DNA_cachefile_types.h"
#include "DNA_collection_types.h"
#include "DNA_fileglobal_types.h"
#include "DNA_genfile.h"
#include "DNA_key_types.h"
#include "DNA_layer_types.h"
#include "DNA_node_types.h"
#include "DNA_packedFile_types.h"
#include "DNA_sdna_types.h"
#include "DNA_sound_types.h"
#include "DNA_vfont_types.h"
#include "DNA_volume_types.h"
#include "DNA_workspace_types.h"
#include "MEM_alloc_string_storage.hh"
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_endian_defines.h"
#include "BLI_endian_switch.h"
#include "BLI_ghash.h"
#include "BLI_linklist.h"
#include "BLI_map.hh"
#include "BLI_memarena.h"
#include "BLI_mempool.h"
#include "BLI_threads.h"
#include "BLI_time.h"
#include "BLT_translation.hh"
#include "BKE_anim_data.hh"
#include "BKE_animsys.h"
#include "BKE_asset.hh"
#include "BKE_blender_version.h"
#include "BKE_collection.hh"
#include "BKE_global.hh"
#include "BKE_idprop.hh"
#include "BKE_idtype.hh"
#include "BKE_layer.hh"
#include "BKE_lib_id.hh"
#include "BKE_lib_override.hh"
#include "BKE_lib_query.hh"
#include "BKE_lib_remap.hh"
#include "BKE_main.hh"
#include "BKE_main_idmap.hh"
#include "BKE_main_namemap.hh"
#include "BKE_material.h"
#include "BKE_mesh.hh"
#include "BKE_modifier.hh"
#include "BKE_node.hh"
#include "BKE_object.hh"
#include "BKE_packedFile.hh"
#include "BKE_preferences.h"
#include "BKE_report.hh"
#include "BKE_scene.hh"
#include "BKE_screen.hh"
#include "BKE_undo_system.hh"
#include "BKE_workspace.hh"
#include "DRW_engine.hh"
#include "DEG_depsgraph.hh"
#include "BLO_blend_defs.hh"
#include "BLO_blend_validate.hh"
#include "BLO_read_write.hh"
#include "BLO_readfile.hh"
#include "BLO_undofile.hh"
#include "SEQ_iterator.hh"
#include "SEQ_modifier.hh"
#include "SEQ_sequencer.hh"
#include "SEQ_utils.hh"
#include "readfile.hh"

Go to the source code of this file.

Classes

struct  BHeadN
 
struct  NewAddress
 
struct  OldNewMap
 
struct  BlendDataReader
 
struct  BlendLibReader
 
struct  BLOCacheStorage
 
struct  BLOCacheStorageValue
 
struct  BHeadSort
 
struct  BlendExpander
 

Macros

#define DNA_DEPRECATED_ALLOW
 
#define U   (*((const UserDef *)&U))
 
#define USE_BHEAD_READ_ON_DEMAND
 
#define USE_GHASH_BHEAD
 
#define USE_GHASH_RESTORE_POINTER
 
#define BHEADN_FROM_BHEAD(bh)   ((BHeadN *)POINTER_OFFSET(bh, -int(offsetof(BHeadN, bhead))))
 
#define BHEAD_USE_READ_ON_DEMAND(bhead)   ((bhead)->code == BLO_CODE_DATA)
 

Functions

Library Reading
static void read_libraries (FileData *basefd, ListBase *mainlist)
 
static int has_linked_ids_to_read (Main *mainvar)
 
static void read_library_linked_id (FileData *basefd, FileData *fd, Main *mainvar, ID *id, ID **r_id)
 
static void read_library_linked_ids (FileData *basefd, FileData *fd, ListBase *mainlist, Main *mainvar)
 
static void read_library_clear_weak_links (FileData *basefd, ListBase *mainlist, Main *mainvar)
 
static FileDataread_library_file_data (FileData *basefd, ListBase *mainlist, Main *mainl, Main *mainptr)
 
static void * blo_verify_data_address (void *new_address, const void *, const size_t expected_size)
 
void * BLO_read_get_new_data_address (BlendDataReader *reader, const void *old_address)
 
void * BLO_read_get_new_data_address_no_us (BlendDataReader *reader, const void *old_address, const size_t expected_size)
 
void * BLO_read_struct_array_with_size (BlendDataReader *reader, const void *old_address, const size_t expected_size)
 
void * BLO_read_struct_by_name_array (BlendDataReader *reader, const char *struct_name, const uint32_t items_num, const void *old_address)
 
IDBLO_read_get_new_id_address (BlendLibReader *reader, ID *self_id, const bool is_linked_only, ID *id)
 
IDBLO_read_get_new_id_address_from_session_uid (BlendLibReader *reader, uint session_uid)
 
int BLO_read_fileversion_get (BlendDataReader *reader)
 
bool BLO_read_requires_endian_switch (BlendDataReader *reader)
 
void BLO_read_struct_list_with_size (BlendDataReader *reader, const size_t expected_elem_size, ListBase *list)
 
void BLO_read_char_array (BlendDataReader *reader, int array_size, char **ptr_p)
 
void BLO_read_uint8_array (BlendDataReader *reader, int array_size, uint8_t **ptr_p)
 
void BLO_read_int8_array (BlendDataReader *reader, int array_size, int8_t **ptr_p)
 
void BLO_read_int32_array (BlendDataReader *reader, int array_size, int32_t **ptr_p)
 
void BLO_read_uint32_array (BlendDataReader *reader, int array_size, uint32_t **ptr_p)
 
void BLO_read_float_array (BlendDataReader *reader, int array_size, float **ptr_p)
 
void BLO_read_float3_array (BlendDataReader *reader, int array_size, float **ptr_p)
 
void BLO_read_double_array (BlendDataReader *reader, int array_size, double **ptr_p)
 
void BLO_read_string (BlendDataReader *reader, char **ptr_p)
 
void BLO_read_string (BlendDataReader *reader, char *const *ptr_p)
 
static void convert_pointer_array_64_to_32 (BlendDataReader *reader, uint array_size, const uint64_t *src, uint32_t *dst)
 
static void convert_pointer_array_32_to_64 (BlendDataReader *, uint array_size, const uint32_t *src, uint64_t *dst)
 
void BLO_read_pointer_array (BlendDataReader *reader, const int array_size, void **ptr_p)
 
blender::ImplicitSharingInfoAndData blo_read_shared_impl (BlendDataReader *reader, const void **ptr_p, const blender::FunctionRef< const blender::ImplicitSharingInfo *()> read_fn)
 
bool BLO_read_data_is_undo (BlendDataReader *reader)
 
void BLO_read_data_globmap_add (BlendDataReader *reader, void *oldaddr, void *newaddr)
 
void BLO_read_glob_list (BlendDataReader *reader, ListBase *list)
 
BlendFileReadReportBLO_read_data_reports (BlendDataReader *reader)
 
bool BLO_read_lib_is_undo (BlendLibReader *reader)
 
MainBLO_read_lib_get_main (BlendLibReader *reader)
 
BlendFileReadReportBLO_read_lib_reports (BlendLibReader *reader)
 
DNA Struct Loading
static void * read_struct (FileData *fd, BHead *bh, const char *blockname, const int id_type_index)
 
static void switch_endian_structs (const SDNA *filesdna, BHead *bhead)
 
static const char * get_alloc_name (FileData *fd, BHead *bh, const char *blockname, int id_type_index=INDEX_ID_NULL)
 
static const void * peek_struct_undo (FileData *fd, BHead *bhead)
 
static void link_glob_list (FileData *fd, ListBase *lb)
 
Library Linking

Also used for append.

static BHeadfind_bhead_from_code_name (FileData *fd, const short idcode, const char *name)
 
static BHeadfind_bhead_from_idname (FileData *fd, const char *idname)
 
static int verg_bheadsort (const void *v1, const void *v2)
 
static void sort_bhead_old_map (FileData *fd)
 
static BHeadfind_previous_lib (FileData *fd, BHead *bhead)
 
static BHeadfind_bhead (FileData *fd, void *old)
 
Blend Loader Reporting Wrapper
void BLO_reportf_wrap (BlendFileReadReport *reports, eReportType type, const char *format,...)
 
static const char * library_parent_filepath (Library *lib)
 
OldNewMap API
static OldNewMapoldnewmap_new ()
 
static bool oldnewmap_insert (OldNewMap *onm, const void *oldaddr, void *newaddr, int nr)
 
static void oldnewmap_lib_insert (FileData *fd, const void *oldaddr, ID *newaddr, int id_code)
 
void blo_do_versions_oldnewmap_insert (OldNewMap *onm, const void *oldaddr, void *newaddr, int nr)
 
static void * oldnewmap_lookup_and_inc (OldNewMap *onm, const void *addr, bool increase_users)
 
static void * oldnewmap_liblookup (OldNewMap *onm, const void *addr, const bool is_linked_only)
 
static void oldnewmap_clear (OldNewMap *onm)
 
static void oldnewmap_free (OldNewMap *onm)
 
Helper Functions
static void add_main_to_main (Main *mainvar, Main *from)
 
void blo_join_main (ListBase *mainlist)
 
static void split_libdata (ListBase *lb_src, Main **lib_main_array, const uint lib_main_array_len)
 
void blo_split_main (ListBase *mainlist, Main *main)
 
static void read_file_version (FileData *fd, Main *main)
 
static bool blo_bhead_is_id (const BHead *bhead)
 
static bool blo_bhead_is_id_valid_type (const BHead *bhead)
 
static void read_file_bhead_idname_map_create (FileData *fd)
 
static Mainblo_find_main (FileData *fd, const char *filepath, const char *relabase)
 
void blo_readfile_invalidate (FileData *fd, Main *bmain, const char *message)
 
File Parsing
static void switch_endian_bh4 (BHead4 *bhead)
 
static void switch_endian_bh8 (BHead8 *bhead)
 
static void bh4_from_bh8 (BHead *bhead, BHead8 *bhead8, bool do_endian_swap)
 
static void bh8_from_bh4 (BHead *bhead, BHead4 *bhead4)
 
static BHeadNget_bhead (FileData *fd)
 
BHeadblo_bhead_first (FileData *fd)
 
BHeadblo_bhead_prev (FileData *, BHead *thisblock)
 
BHeadblo_bhead_next (FileData *fd, BHead *thisblock)
 
static bool blo_bhead_read_data (FileData *fd, BHead *thisblock, void *buf)
 
static BHeadblo_bhead_read_full (FileData *fd, BHead *thisblock)
 
const char * blo_bhead_id_name (const FileData *fd, const BHead *bhead)
 
AssetMetaDatablo_bhead_id_asset_data_address (const FileData *fd, const BHead *bhead)
 
static void decode_blender_header (FileData *fd)
 
static bool read_file_dna (FileData *fd, const char **r_error_message)
 
static intread_file_thumbnail (FileData *fd)
 
File Data API
static FileDatafiledata_new (BlendFileReadReport *reports)
 
static bool is_minversion_older_than_blender (FileData *fd, ReportList *reports)
 
static FileDatablo_decode_and_check (FileData *fd, ReportList *reports)
 
static FileDatablo_filedata_from_file_descriptor (const char *filepath, BlendFileReadReport *reports, int filedes)
 
static FileDatablo_filedata_from_file_open (const char *filepath, BlendFileReadReport *reports)
 
FileDatablo_filedata_from_file (const char *filepath, BlendFileReadReport *reports)
 
static FileDatablo_filedata_from_file_minimal (const char *filepath)
 
FileDatablo_filedata_from_memory (const void *mem, int memsize, BlendFileReadReport *reports)
 
FileDatablo_filedata_from_memfile (MemFile *memfile, const BlendFileReadParams *params, BlendFileReadReport *reports)
 
void blo_filedata_free (FileData *fd)
 
Read Thumbnail from Blend File
BlendThumbnailBLO_thumbnail_from_file (const char *filepath)
 
short BLO_version_from_file (const char *filepath)
 
Old/New Pointer Map
static void * newdataadr (FileData *fd, const void *adr)
 
static void * newdataadr_no_us (FileData *fd, const void *adr)
 
void * blo_read_get_new_globaldata_address (FileData *fd, const void *adr)
 
static void * newlibadr (FileData *fd, ID *, const bool is_linked_only, const void *adr)
 
void * blo_do_versions_newlibadr (FileData *fd, ID *self_id, const bool is_linked_only, const void *adr)
 
static void change_link_placeholder_to_real_ID_pointer_fd (FileData *fd, const void *old, void *newp)
 
static void change_link_placeholder_to_real_ID_pointer (ListBase *mainlist, FileData *basefd, void *old, void *newp)
 
void blo_make_old_idmap_from_main (FileData *fd, Main *bmain)
 
static void blo_cache_storage_entry_register (ID *id, const IDCacheKey *key, void **cache_p, uint, void *cache_storage_v)
 
static void blo_cache_storage_entry_restore_in_new (ID *id, const IDCacheKey *key, void **cache_p, uint flags, void *cache_storage_v)
 
static void blo_cache_storage_entry_clear_in_old (ID *, const IDCacheKey *key, void **cache_p, uint, void *cache_storage_v)
 
void blo_cache_storage_init (FileData *fd, Main *bmain)
 
void blo_cache_storage_old_bmain_clear (FileData *fd, Main *bmain_old)
 
void blo_cache_storage_end (FileData *fd)
 
Read ID
static void after_liblink_id_process (BlendLibReader *reader, ID *id)
 
static void after_liblink_id_embedded_id_process (BlendLibReader *reader, ID *id)
 
static void direct_link_id_override_property (BlendDataReader *reader, IDOverrideLibraryProperty *op)
 
static void direct_link_id_common (BlendDataReader *reader, Library *current_library, ID *id, ID *id_old, const int id_tag)
 
static void direct_link_id_embedded_id (BlendDataReader *reader, Library *current_library, ID *id, ID *id_old)
 
static int direct_link_id_restore_recalc_exceptions (const ID *id_current)
 
static int direct_link_id_restore_recalc (const FileData *fd, const ID *id_target, const ID *id_current, const bool is_identical)
 
Read ID: Shape Keys
void blo_do_versions_key_uidgen (Key *key)
 
Read ID: Scene
static void lib_link_scenes_check_set (Main *bmain)
 
Read ID: Library
static void direct_link_library (FileData *fd, Library *lib, Main *main)
 
static void fix_relpaths_library (const char *basepath, Main *main)
 
Read Library Data Block
static IDcreate_placeholder (Main *mainvar, const short idcode, const char *idname, const int tag, const bool was_liboverride)
 
static void placeholders_ensure_valid (Main *bmain)
 
static bool direct_link_id (FileData *fd, Main *main, const int tag, ID *id, ID *id_old)
 
static BHeadread_data_into_datamap (FileData *fd, BHead *bhead, const char *allocname, const int id_type_index)
 
static bool read_libblock_is_identical (FileData *fd, BHead *bhead)
 
static void read_undo_reuse_noundo_local_ids (FileData *fd)
 
static void read_undo_move_libmain_data (FileData *fd, Main *new_main, Main *old_main, Main *libmain, BHead *bhead)
 
static bool read_libblock_undo_restore_library (FileData *fd, Main *new_main, const ID *id, ID *id_old, BHead *bhead)
 
static IDlibrary_id_is_yet_read (FileData *fd, Main *mainvar, BHead *bhead)
 
static bool read_libblock_undo_restore_linked (FileData *fd, Main *libmain, const ID *id, ID **r_id_old, BHead *bhead)
 
static void read_libblock_undo_restore_identical (FileData *fd, Main *main, const ID *, ID *id_old, BHead *bhead, const int id_tag)
 
static void read_libblock_undo_restore_at_old_address (FileData *fd, Main *main, ID *id, ID *id_old)
 
static bool read_libblock_undo_restore (FileData *fd, Main *main, BHead *bhead, int id_tag, ID **r_id_old)
 
static BHeadread_libblock (FileData *fd, Main *main, BHead *bhead, int id_tag, const bool placeholder_set_indirect_extern, ID **r_id)
 
Read Asset Data
BHeadblo_read_asset_data_block (FileData *fd, BHead *bhead, AssetMetaData **r_asset_data)
 
Read Global Data
static BHeadread_global (BlendFileData *bfd, FileData *fd, BHead *bhead)
 
static void link_global (FileData *fd, BlendFileData *bfd)
 
Versioning
static void do_versions_userdef (FileData *, BlendFileData *bfd)
 
static void do_versions (FileData *fd, Library *lib, Main *main)
 
static void do_versions_after_linking (FileData *fd, Main *main)
 
Read Library Data Block (all)
static int lib_link_cb (LibraryIDLinkCallbackData *cb_data)
 
static void lib_link_all (FileData *fd, Main *bmain)
 
static void after_liblink_merged_bmain_process (Main *bmain, BlendFileReadReport *reports)
 
Read User Preferences
static void direct_link_keymapitem (BlendDataReader *reader, wmKeyMapItem *kmi)
 
static BHeadread_userdef (BlendFileData *bfd, FileData *fd, BHead *bhead)
 
Read File (Internal)
static int read_undo_remap_noundo_data_cb (LibraryIDLinkCallbackData *cb_data)
 
static void read_undo_remap_noundo_data (FileData *fd)
 
static void blo_read_file_checks (Main *bmain)
 
BlendFileDatablo_read_file_internal (FileData *fd, const char *filepath)
 
Library Linking (expand pointers)
static void expand_doit_library (void *fdhandle, Main *mainvar, void *old)
 
static int expand_cb (LibraryIDLinkCallbackData *cb_data)
 
void BLO_expand_main (void *fdhandle, Main *mainvar, BLOExpandDoitCallback callback)
 
Library Linking (helper functions)
static IDlink_named_part (Main *mainl, FileData *fd, const short idcode, const char *name, const int flag)
 
IDBLO_library_link_named_part (Main *mainl, BlendHandle **bh, const short idcode, const char *name, const LibraryLink_Params *params)
 
static Mainlibrary_link_begin (Main *mainvar, FileData *fd, const char *filepath, const int id_tag_extra)
 
void BLO_library_link_params_init (LibraryLink_Params *params, Main *bmain, const int flag, const int id_tag_extra)
 
void BLO_library_link_params_init_with_context (LibraryLink_Params *params, Main *bmain, const int flag, const int id_tag_extra, Scene *scene, ViewLayer *view_layer, const View3D *v3d)
 
MainBLO_library_link_begin (BlendHandle **bh, const char *filepath, const LibraryLink_Params *params)
 
static void split_main_newid (Main *mainptr, Main *main_newid)
 
static void library_link_end (Main *mainl, FileData **fd, const int flag)
 
void BLO_library_link_end (Main *mainl, BlendHandle **bh, const LibraryLink_Params *params)
 
void * BLO_library_read_struct (FileData *fd, BHead *bh, const char *blockname)
 

Variables

static CLG_LogRef LOG = {"blo.readfile"}
 
static CLG_LogRef LOG_UNDO = {"blo.readfile.undo"}
 

Macro Definition Documentation

◆ BHEAD_USE_READ_ON_DEMAND

#define BHEAD_USE_READ_ON_DEMAND ( bhead)    ((bhead)->code == BLO_CODE_DATA)

We could change this in the future, for now it's simplest if only data is delayed because ID names are used in lookup tables.

Definition at line 207 of file readfile.cc.

Referenced by blo_filedata_free(), and get_bhead().

◆ BHEADN_FROM_BHEAD

#define BHEADN_FROM_BHEAD ( bh)    ((BHeadN *)POINTER_OFFSET(bh, -int(offsetof(BHeadN, bhead))))

◆ DNA_DEPRECATED_ALLOW

#define DNA_DEPRECATED_ALLOW

Definition at line 32 of file readfile.cc.

◆ U

#define U   (*((const UserDef *)&U))

Definition at line 113 of file readfile.cc.

◆ USE_BHEAD_READ_ON_DEMAND

#define USE_BHEAD_READ_ON_DEMAND

READ

  • Existing Library (Main) push or free
  • allocate new Main
  • load file
  • read SDNA
  • for each LibBlock
    • read LibBlock
    • if a Library
      • make a new Main
      • attach ID's to it
    • else
      • read associated 'direct data'
      • link direct data (internal and to LibBlock)
  • read FileGlobal
  • read #USER data, only when indicated (file is ~/.config/blender/X.X/config/userpref.blend)
  • free file
  • per Library (per Main)
    • read file
    • read SDNA
    • find LibBlocks and attach ID's to Main
      • if external LibBlock
        • search all Main's
          • or it's already read,
          • or not read yet
          • or make new Main
    • per LibBlock
      • read recursive
      • read associated direct data
      • link direct data (internal and to LibBlock)
    • free file
  • per Library with unread LibBlocks
    • read file
    • read SDNA
    • per LibBlock
      • read recursive
      • read associated direct data
      • link direct data (internal and to LibBlock)
    • free file
  • join all Main's
  • link all LibBlocks and indirect pointers to libblocks
  • initialize FileGlobal and copy pointers to Global
Note
Still a weak point is the new-address function, that doesn't solve reading from multiple files at the same time. (added remark: oh, i thought that was solved? will look at that... (ton). Delay reading blocks we might not use (especially applies to library linking). which keeps large arrays in memory from data-blocks we may not even use.
This is disabled when using compression, while ZLIB supports seek it's unusably slow, see: #61880.

Definition at line 172 of file readfile.cc.

◆ USE_GHASH_BHEAD

#define USE_GHASH_BHEAD

Use GHash for BHead name-based lookups (speeds up linking).

Definition at line 175 of file readfile.cc.

◆ USE_GHASH_RESTORE_POINTER

#define USE_GHASH_RESTORE_POINTER

Use GHash for restoring pointers by name.

Definition at line 178 of file readfile.cc.

Function Documentation

◆ add_main_to_main()

static void add_main_to_main ( Main * mainvar,
Main * from )
static

◆ after_liblink_id_embedded_id_process()

static void after_liblink_id_embedded_id_process ( BlendLibReader * reader,
ID * id )
static

◆ after_liblink_id_process()

static void after_liblink_id_process ( BlendLibReader * reader,
ID * id )
static

◆ after_liblink_merged_bmain_process()

static void after_liblink_merged_bmain_process ( Main * bmain,
BlendFileReadReport * reports )
static

Checks to perform after lib_link_all. Those operations cannot perform properly in a split bmain case, since some data from other bmain's (aka libraries) may not have been processed yet.

Definition at line 3324 of file readfile.cc.

References BKE_main_collections_parent_relations_rebuild(), BKE_main_namemap_validate_and_fix(), BKE_report(), BLI_assert, BLO_main_validate_embedded_flag(), BLO_main_validate_embedded_liboverrides(), BLO_main_validate_shapekeys(), lib_link_scenes_check_set(), Main::next, Main::prev, BlendFileReadReport::reports, and RPT_ERROR.

Referenced by blo_read_file_internal(), and library_link_end().

◆ bh4_from_bh8()

static void bh4_from_bh8 ( BHead * bhead,
BHead8 * bhead8,
bool do_endian_swap )
static

◆ bh8_from_bh4()

static void bh8_from_bh4 ( BHead * bhead,
BHead4 * bhead4 )
static

◆ blo_bhead_first()

◆ blo_bhead_id_asset_data_address()

AssetMetaData * blo_bhead_id_asset_data_address ( const FileData * fd,
const BHead * bhead )

Warning! Caller's responsibility to ensure given bhead is an ID one!

Definition at line 939 of file readfile.cc.

References BLI_assert, blo_bhead_is_id_valid_type(), FileData::id_asset_data_offset, and POINTER_OFFSET.

Referenced by BLO_blendhandle_get_datablock_info(), and BLO_blendhandle_get_datablock_names().

◆ blo_bhead_id_name()

const char * blo_bhead_id_name ( const FileData * fd,
const BHead * bhead )

◆ blo_bhead_is_id()

static bool blo_bhead_is_id ( const BHead * bhead)
static

Definition at line 478 of file readfile.cc.

References BHead::code.

Referenced by blo_bhead_is_id_valid_type().

◆ blo_bhead_is_id_valid_type()

◆ blo_bhead_next()

◆ blo_bhead_prev()

BHead * blo_bhead_prev ( FileData * ,
BHead * thisblock )

Definition at line 859 of file readfile.cc.

References BHEADN_FROM_BHEAD, and BHeadN::prev.

Referenced by BLO_blendhandle_get_datablock_info(), and find_previous_lib().

◆ blo_bhead_read_data()

◆ blo_bhead_read_full()

static BHead * blo_bhead_read_full ( FileData * fd,
BHead * thisblock )
static

◆ blo_cache_storage_end()

void blo_cache_storage_end ( FileData * fd)

◆ blo_cache_storage_entry_clear_in_old()

static void blo_cache_storage_entry_clear_in_old ( ID * ,
const IDCacheKey * key,
void ** cache_p,
uint ,
void * cache_storage_v )
static

Clear as needed a cache data entry from old ID, when reading some undo memfile.

Definition at line 1607 of file readfile.cc.

References BLI_assert, BLI_ghash_lookup(), BLOCacheStorage::cache_map, BLOCacheStorageValue::cache_v, and BLOCacheStorageValue::new_usage_count.

Referenced by blo_cache_storage_old_bmain_clear().

◆ blo_cache_storage_entry_register()

static void blo_cache_storage_entry_register ( ID * id,
const IDCacheKey * key,
void ** cache_p,
uint ,
void * cache_storage_v )
static

◆ blo_cache_storage_entry_restore_in_new()

static void blo_cache_storage_entry_restore_in_new ( ID * id,
const IDCacheKey * key,
void ** cache_p,
uint flags,
void * cache_storage_v )
static

Restore a cache data entry from old ID into new one, when reading some undo memfile.

Definition at line 1572 of file readfile.cc.

References BLI_ghash_lookup(), BLOCacheStorage::cache_map, BLOCacheStorageValue::cache_v, ID_RECALC_SOURCE, IDTYPE_CACHE_CB_FLAGS_PERSISTENT, and BLOCacheStorageValue::new_usage_count.

Referenced by direct_link_id().

◆ blo_cache_storage_init()

◆ blo_cache_storage_old_bmain_clear()

◆ blo_decode_and_check()

◆ blo_do_versions_key_uidgen()

void blo_do_versions_key_uidgen ( Key * key)

Definition at line 2211 of file readfile.cc.

References Key::block, LISTBASE_FOREACH, and Key::uidgen.

Referenced by blo_do_versions_260().

◆ blo_do_versions_newlibadr()

void * blo_do_versions_newlibadr ( FileData * fd,
ID * self_id,
const bool is_linked_only,
const void * adr )

Only library data.

Definition at line 1489 of file readfile.cc.

References newlibadr().

Referenced by blo_do_versions_250(), blo_do_versions_260(), blo_do_versions_pre250(), and ntree_version_245().

◆ blo_do_versions_oldnewmap_insert()

void blo_do_versions_oldnewmap_insert ( OldNewMap * onm,
const void * oldaddr,
void * newaddr,
int nr )

Definition at line 278 of file readfile.cc.

References oldnewmap_insert().

Referenced by blo_do_versions_pre250().

◆ BLO_expand_main()

void BLO_expand_main ( void * fdhandle,
Main * mainvar,
BLOExpandDoitCallback callback )

Loop over all ID data in Main to mark relations. Set (id->tag & ID_TAG_NEED_EXPAND) to mark expanding. Flags get cleared after expanding.

Parameters
fdhandleusually file-data, or own handle. May be nullptr.
mainvarthe Main database to expand.
calbackCalled for each ID block it finds.

Definition at line 4159 of file readfile.cc.

References BKE_library_foreach_ID_link(), callback, expand_cb(), FD_FLAGS_IS_MEMFILE, flag, FileData::flags, FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, ID_TAG_NEED_EXPAND, IDWALK_DO_DEPRECATED_POINTERS, IDWALK_NO_ORIG_POINTERS_ACCESS, IDWALK_READONLY, and ID::tag.

Referenced by blender::bke::asset_main_create_from_ID(), library_link_end(), and read_libraries().

◆ blo_filedata_free()

◆ blo_filedata_from_file()

FileData * blo_filedata_from_file ( const char * filepath,
BlendFileReadReport * reports )

On each new library added, it now checks for the current FileData and expands relativeness

cannot be called with relative paths anymore!

Definition at line 1282 of file readfile.cc.

References blo_decode_and_check(), blo_filedata_from_file_open(), FileData::relabase, BlendFileReadReport::reports, and STRNCPY.

Referenced by BLO_blendhandle_from_file(), BLO_read_from_file(), and read_library_file_data().

◆ blo_filedata_from_file_descriptor()

◆ blo_filedata_from_file_minimal()

static FileData * blo_filedata_from_file_minimal ( const char * filepath)
static

Same as blo_filedata_from_file(), but does not reads DNA data, only header. Use it for light access (e.g. thumbnail reading).

Definition at line 1298 of file readfile.cc.

References blo_filedata_free(), blo_filedata_from_file_open(), decode_blender_header(), FD_FLAGS_FILE_OK, and FileData::flags.

Referenced by BLO_thumbnail_from_file(), and BLO_version_from_file().

◆ blo_filedata_from_file_open()

static FileData * blo_filedata_from_file_open ( const char * filepath,
BlendFileReadReport * reports )
static

◆ blo_filedata_from_memfile()

◆ blo_filedata_from_memory()

◆ blo_find_main()

◆ blo_join_main()

◆ BLO_library_link_begin()

Main * BLO_library_link_begin ( BlendHandle ** bh,
const char * filepath,
const LibraryLink_Params * params )

Initialize the #BlendHandle for linking library data.

Parameters
bhA blender file handle as returned by BLO_blendhandle_from_file or BLO_blendhandle_from_memory.
filepathUsed for relative linking, copied to the lib->filepath.
paramsSettings for linking that don't change from beginning to end of linking.
Returns
the library Main, to be passed to BLO_library_link_named_part as mainl.

Definition at line 4332 of file readfile.cc.

References library_link_begin(), and params.

Referenced by BKE_blendfile_link(), and BLO_library_temp_load_id().

◆ BLO_library_link_end()

void BLO_library_link_end ( Main * mainl,
BlendHandle ** bh,
const LibraryLink_Params * params )

Finalize linking from a given .blend file (library). Optionally instance the indirect object/collection in the scene when the flags are set.

Note
Do not use bh after calling this function, it may frees it.
Parameters
mainlThe main database to link from (not the active one).
bhThe blender file handle (WARNING! may be freed by this function!).
paramsSettings for linking that don't change from beginning to end of linking.

Definition at line 4484 of file readfile.cc.

References blo_filedata_free(), Main::is_read_invalid, lib, library_link_end(), LISTBASE_FOREACH, and params.

Referenced by BKE_blendfile_link(), and BLO_library_temp_free().

◆ BLO_library_link_named_part()

ID * BLO_library_link_named_part ( Main * mainl,
BlendHandle ** bh,
short idcode,
const char * name,
const LibraryLink_Params * params )

Link a named data-block from an external blend file.

Parameters
mainlThe main database to link from (not the active one).
bhThe blender file handle.
idcodeThe kind of data-block to link.
nameThe name of the data-block (without the 2 char ID prefix).
Returns
the linked ID when found.

Definition at line 4248 of file readfile.cc.

References Main::is_read_invalid, link_named_part(), and params.

Referenced by BKE_blendfile_link(), and BLO_library_temp_load_id().

◆ BLO_library_link_params_init()

void BLO_library_link_params_init ( LibraryLink_Params * params,
Main * bmain,
const int flag,
const int id_tag_extra )

◆ BLO_library_link_params_init_with_context()

void BLO_library_link_params_init_with_context ( LibraryLink_Params * params,
Main * bmain,
const int flag,
const int id_tag_extra,
Scene * scene,
ViewLayer * view_layer,
const View3D * v3d )

◆ BLO_library_read_struct()

void * BLO_library_read_struct ( FileData * fd,
BHead * bh,
const char * blockname )

◆ blo_make_old_idmap_from_main()

void blo_make_old_idmap_from_main ( FileData * fd,
Main * bmain )

◆ blo_read_asset_data_block()

◆ BLO_read_char_array()

void BLO_read_char_array ( BlendDataReader * reader,
int array_size,
char ** ptr_p )

◆ BLO_read_data_globmap_add()

void BLO_read_data_globmap_add ( BlendDataReader * reader,
void * oldaddr,
void * newaddr )

Definition at line 5140 of file readfile.cc.

References BlendDataReader::fd, FileData::globmap, and oldnewmap_insert().

Referenced by window_manager_blend_read_data().

◆ BLO_read_data_is_undo()

◆ BLO_read_data_reports()

BlendFileReadReport * BLO_read_data_reports ( BlendDataReader * reader)

Definition at line 5150 of file readfile.cc.

References BlendDataReader::fd, and FileData::reports.

Referenced by BKE_modifier_blend_read_data(), and link_recurs_seq().

◆ BLO_read_double_array()

void BLO_read_double_array ( BlendDataReader * reader,
int array_size,
double ** ptr_p )

◆ blo_read_file_checks()

static void blo_read_file_checks ( Main * bmain)
static

Contains sanity/debug checks to be performed at the very end of the reading process (i.e. after data, liblink, linked data, etc. has been done).

Definition at line 3515 of file readfile.cc.

References BLI_assert, Main::is_read_invalid, LISTBASE_FOREACH, Main::next, UNUSED_VARS_NDEBUG, and Main::wm.

Referenced by blo_read_file_internal(), and library_link_end().

◆ blo_read_file_internal()

BlendFileData * blo_read_file_internal ( FileData * fd,
const char * filepath )

Definition at line 3531 of file readfile.cc.

References after_liblink_merged_bmain_process(), ATTR_FALLTHROUGH, BKE_collections_after_lib_link(), BKE_id_delete(), BKE_layer_collection_resync_allow(), BKE_layer_collection_resync_forbid(), BKE_lib_override_library_main_update(), BKE_lib_override_library_main_validate(), BKE_main_collections_parent_relations_rebuild(), BKE_main_id_refcount_recompute(), BKE_main_id_tag_all(), BKE_main_idmap_create(), BKE_main_new(), BKE_view_layer_find(), Main::blen_thumb, BLEN_THUMB_MEMSIZE, BLEN_THUMB_MEMSIZE_FILE, BLEN_THUMB_MEMSIZE_IS_VALID, BLENFILETYPE_BLEND, BLI_addtail(), BLI_assert, BLI_time_now_seconds(), blo_bhead_first(), blo_bhead_is_id_valid_type(), blo_bhead_next(), BLO_CODE_DATA, BLO_CODE_DNA1, BLO_CODE_ENDB, BLO_CODE_GLOB, BLO_CODE_REND, BLO_CODE_TEST, BLO_CODE_USER, blo_filedata_free(), blo_join_main(), blo_read_file_checks(), BLO_READ_SKIP_DATA, BLO_READ_SKIP_USERDEF, blo_split_main(), CLOG_INFO, BHead::code, BlendFileData::cur_view_layer, Main::curlib, BlendFileData::curscene, do_versions(), do_versions_after_linking(), do_versions_userdef(), BlendFileReadReport::duration, FD_FLAGS_IS_MEMFILE, BlendFileData::filepath, Main::filepath, FileData::fileversion, ListBase::first, fix_relpaths_library(), FileData::flags, FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, G, BlendThumbnail::height, ID_LINK_PLACEHOLDER, Main::id_map, ID_SCR, ID_SCRN, ID_TAG_LOCAL, ID_TAG_NEW, Main::is_read_invalid, ListBase::last, ID::lib, lib, lib_link_all(), BlendFileReadReport::lib_overrides, BlendFileReadReport::libraries, Main::libraries, link_global(), LISTBASE_FOREACH, LISTBASE_FOREACH_MUTABLE, LOG_UNDO, BlendFileData::main, MAIN_IDMAP_TYPE_UID, FileData::mainlist, MEM_callocN, MEM_mallocN, ViewLayer::name, FileData::new_idmap_uid, Main::next, blender::bke::node_tree_update_all_new(), FileData::old_mainlist, placeholders_ensure_valid(), read_file_thumbnail(), read_global(), read_libblock(), read_libraries(), read_undo_move_libmain_data(), read_undo_remap_noundo_data(), read_undo_reuse_noundo_local_ids(), read_userdef(), BlendThumbnail::rect, FileData::relabase, BlendFileReadReport::reports, FileData::reports, FileData::skip_flags, STRNCPY, BlendFileData::type, Main::versionfile, and BlendThumbnail::width.

Referenced by BLO_read_from_file(), BLO_read_from_memfile(), and BLO_read_from_memory().

◆ BLO_read_fileversion_get()

int BLO_read_fileversion_get ( BlendDataReader * reader)

◆ BLO_read_float3_array()

void BLO_read_float3_array ( BlendDataReader * reader,
int array_size,
float ** ptr_p )

◆ BLO_read_float_array()

◆ BLO_read_get_new_data_address()

void * BLO_read_get_new_data_address ( BlendDataReader * reader,
const void * old_address )

Definition at line 4852 of file readfile.cc.

References BlendDataReader::fd, and newdataadr().

◆ BLO_read_get_new_data_address_no_us()

void * BLO_read_get_new_data_address_no_us ( BlendDataReader * reader,
const void * old_address,
size_t expected_size )

Does not consider the read data as 'used'. It will still be freed by readfile code at the end of the reading process, if no other 'real' usage was detected for it.

Typical valid usages include:

  • Restoring pointers to a specific item in an array or list (usually 'active' item e.g.). The found item is expected to also be read as part of its array/list storage reading.
  • Doing temporary access to deprecated data as part of some versioning code.

Definition at line 4857 of file readfile.cc.

References blo_verify_data_address(), BlendDataReader::fd, and newdataadr_no_us().

Referenced by BKE_modifier_blend_read_data(), modifier_replace_with_fluid(), blender::ed::outliner::outliner_space_blend_read_data(), and scene_blend_read_data().

◆ blo_read_get_new_globaldata_address()

void * blo_read_get_new_globaldata_address ( FileData * fd,
const void * adr )

Direct data-blocks with global linking.

Note
This is rather unfortunate to have to expose this here, but better use that nasty hack in do_version than readfile itself.

Definition at line 1478 of file readfile.cc.

References FileData::globmap, and oldnewmap_lookup_and_inc().

Referenced by blo_do_versions_290(), and link_global().

◆ BLO_read_get_new_id_address()

ID * BLO_read_get_new_id_address ( BlendLibReader * reader,
ID * self_id,
const bool is_linked_only,
ID * id )

Search for the new address of given id, during library linking part of blend-file reading process.

Parameters
self_idthe ID owner of the given id pointer. Note that it may be an embedded ID.
is_linked_onlyIf true, only return found pointer if it is a linked ID. Used to prevent linked data to point to local IDs.
Returns
the new address of the given ID pointer, or null if not found.

Definition at line 4885 of file readfile.cc.

References BlendLibReader::fd, and newlibadr().

Referenced by lib_link_cb().

◆ BLO_read_get_new_id_address_from_session_uid()

ID * BLO_read_get_new_id_address_from_session_uid ( BlendLibReader * reader,
uint session_uid )

Search for the new address of the ID for the given session_uid.

Only IDs existing in the newly read Main will be returned. If no matching session_uid in new main can be found, nullptr is returned.

This expected to be used during library-linking and/or 'undo_preserve' processes in undo case (i.e. memfile reading), typically to find a valid value (or nullptr) for ID pointers values coming from the previous, existing Main data, when it is preserved in newly read Main. See e.g. the scene_undo_preserve code-path.

Definition at line 4893 of file readfile.cc.

References BKE_main_idmap_lookup_uid(), BlendLibReader::fd, and FileData::new_idmap_uid.

Referenced by scene_foreach_toolsettings_id_pointer_process().

◆ BLO_read_glob_list()

void BLO_read_glob_list ( BlendDataReader * reader,
ListBase * list )

Definition at line 5145 of file readfile.cc.

References BlendDataReader::fd, and link_glob_list().

Referenced by scene_blend_read_data().

◆ BLO_read_int32_array()

◆ BLO_read_int8_array()

void BLO_read_int8_array ( BlendDataReader * reader,
int array_size,
int8_t ** ptr_p )

◆ BLO_read_lib_get_main()

Main * BLO_read_lib_get_main ( BlendLibReader * reader)

◆ BLO_read_lib_is_undo()

bool BLO_read_lib_is_undo ( BlendLibReader * reader)

◆ BLO_read_lib_reports()

BlendFileReadReport * BLO_read_lib_reports ( BlendLibReader * reader)

◆ BLO_read_pointer_array()

◆ BLO_read_requires_endian_switch()

◆ blo_read_shared_impl()

◆ BLO_read_string() [1/2]

void BLO_read_string ( BlendDataReader * reader,
char ** ptr_p )

◆ BLO_read_string() [2/2]

void BLO_read_string ( BlendDataReader * reader,
char *const * ptr_p )

Definition at line 5011 of file readfile.cc.

References BLO_read_string().

◆ BLO_read_struct_array_with_size()

void * BLO_read_struct_array_with_size ( BlendDataReader * reader,
const void * old_address,
size_t expected_size )

The 'main' read function and helper macros for non-basic data types.

NOTE: Currently the usage of the type info is very minimal/basic, it merely does a lose check on the data size.

Definition at line 4865 of file readfile.cc.

References blo_verify_data_address(), BlendDataReader::fd, and newdataadr().

Referenced by BLO_read_char_array(), BLO_read_double_array(), BLO_read_float_array(), BLO_read_int32_array(), BLO_read_int8_array(), BLO_read_struct_by_name_array(), BLO_read_struct_list_with_size(), BLO_read_uint32_array(), and BLO_read_uint8_array().

◆ BLO_read_struct_by_name_array()

void * BLO_read_struct_by_name_array ( BlendDataReader * reader,
const char * struct_name,
uint32_t items_num,
const void * old_address )

◆ BLO_read_struct_list_with_size()

void BLO_read_struct_list_with_size ( BlendDataReader * reader,
const size_t expected_elem_size,
ListBase * list )

◆ BLO_read_uint32_array()

void BLO_read_uint32_array ( BlendDataReader * reader,
int array_size,
uint32_t ** ptr_p )

◆ BLO_read_uint8_array()

void BLO_read_uint8_array ( BlendDataReader * reader,
int array_size,
uint8_t ** ptr_p )

Definition at line 4935 of file readfile.cc.

References BLO_read_struct_array_with_size().

Referenced by blend_read_layer_data().

◆ blo_readfile_invalidate()

void blo_readfile_invalidate ( FileData * fd,
Main * bmain,
const char * message )

◆ BLO_reportf_wrap()

void BLO_reportf_wrap ( BlendFileReadReport * reports,
eReportType type,
const char * format,
... )

◆ blo_split_main()

◆ BLO_thumbnail_from_file()

BlendThumbnail * BLO_thumbnail_from_file ( const char * filepath)

Does a very light reading of given .blend file to extract its stored thumbnail.

Parameters
filepathThe path of the file to extract thumbnail from.
Returns
The raw thumbnail (MEM-allocated, as stored in file, use BKE_main_thumbnail_to_imbuf() to convert it to ImBuf image).

Definition at line 1422 of file readfile.cc.

References BLEN_THUMB_MEMSIZE, BLEN_THUMB_MEMSIZE_FILE, BLEN_THUMB_MEMSIZE_IS_VALID, BLI_assert, blo_filedata_free(), blo_filedata_from_file_minimal(), data, MEM_mallocN, and read_file_thumbnail().

Referenced by imb_thumb_load_from_blendfile(), and uiTemplateRecentFiles_tooltip_func().

◆ blo_verify_data_address()

static void * blo_verify_data_address ( void * new_address,
const void * ,
const size_t expected_size )
static

◆ BLO_version_from_file()

short BLO_version_from_file ( const char * filepath)

Does a very light reading of given .blend file to extract its version.

Parameters
filepathThe path of the blend file to extract version from.
Returns
The file version

Definition at line 1449 of file readfile.cc.

References blo_filedata_free(), blo_filedata_from_file_minimal(), and FileData::fileversion.

Referenced by file_draw_tooltip_custom_func(), and uiTemplateRecentFiles_tooltip_func().

◆ change_link_placeholder_to_real_ID_pointer()

static void change_link_placeholder_to_real_ID_pointer ( ListBase * mainlist,
FileData * basefd,
void * old,
void * newp )
static

◆ change_link_placeholder_to_real_ID_pointer_fd()

static void change_link_placeholder_to_real_ID_pointer_fd ( FileData * fd,
const void * old,
void * newp )
static

◆ convert_pointer_array_32_to_64()

static void convert_pointer_array_32_to_64 ( BlendDataReader * ,
uint array_size,
const uint32_t * src,
uint64_t * dst )
static

Definition at line 5041 of file readfile.cc.

Referenced by BLO_read_pointer_array().

◆ convert_pointer_array_64_to_32()

static void convert_pointer_array_64_to_32 ( BlendDataReader * reader,
uint array_size,
const uint64_t * src,
uint32_t * dst )
static

Definition at line 5021 of file readfile.cc.

References BLI_endian_switch_uint64(), BLO_read_requires_endian_switch(), and ptr.

Referenced by BLO_read_pointer_array().

◆ create_placeholder()

◆ decode_blender_header()

◆ direct_link_id()

◆ direct_link_id_common()

◆ direct_link_id_embedded_id()

static void direct_link_id_embedded_id ( BlendDataReader * reader,
Library * current_library,
ID * id,
ID * id_old )
static

◆ direct_link_id_override_property()

◆ direct_link_id_restore_recalc()

static int direct_link_id_restore_recalc ( const FileData * fd,
const ID * id_target,
const ID * id_current,
const bool is_identical )
static

◆ direct_link_id_restore_recalc_exceptions()

static int direct_link_id_restore_recalc_exceptions ( const ID * id_current)
static

◆ direct_link_keymapitem()

static void direct_link_keymapitem ( BlendDataReader * reader,
wmKeyMapItem * kmi )
static

◆ direct_link_library()

◆ do_versions()

◆ do_versions_after_linking()

◆ do_versions_userdef()

static void do_versions_userdef ( FileData * ,
BlendFileData * bfd )
static

Definition at line 3108 of file readfile.cc.

References blo_do_versions_userdef(), and BlendFileData::user.

Referenced by blo_read_file_internal().

◆ expand_cb()

◆ expand_doit_library()

◆ filedata_new()

◆ find_bhead()

◆ find_bhead_from_code_name()

static BHead * find_bhead_from_code_name ( FileData * fd,
const short idcode,
const char * name )
static

◆ find_bhead_from_idname()

static BHead * find_bhead_from_idname ( FileData * fd,
const char * idname )
static

◆ find_previous_lib()

static BHead * find_previous_lib ( FileData * fd,
BHead * bhead )
static

Definition at line 3901 of file readfile.cc.

References blo_bhead_prev(), BHead::code, FD_FLAGS_IS_MEMFILE, FileData::flags, and ID_LI.

Referenced by expand_doit_library().

◆ fix_relpaths_library()

static void fix_relpaths_library ( const char * basepath,
Main * main )
static

Definition at line 2347 of file readfile.cc.

References BLI_path_is_rel(), BLI_path_rel(), lib, LISTBASE_FOREACH, main(), and STRNCPY.

Referenced by blo_read_file_internal(), and library_link_end().

◆ get_alloc_name()

static const char * get_alloc_name ( FileData * fd,
BHead * bh,
const char * blockname,
int id_type_index = INDEX_ID_NULL )
static

Generate the final allocation string reference for read blocks of data. If blockname is given, use it as 'owner block' info, otherwise use the id type index to get that info.

Note
These strings are stored until Blender exits

Definition at line 1731 of file readfile.cc.

References intern::memutil::alloc_string_storage_get(), BKE_idtype_get_info_from_idtype_index(), BLI_assert, intern::memutil::AllocStringStorage< keyT, hashT >::contains(), DNA_struct_identifier(), FileData::filesdna, intern::memutil::AllocStringStorage< keyT, hashT >::find(), INDEX_ID_MAX, INDEX_ID_NULL, intern::memutil::AllocStringStorage< keyT, hashT >::insert(), int, IDTypeInfo::name, BHead::nr, BHead::SDNAnr, FileData::storage_handle, UNLIKELY, and UNUSED_VARS_NDEBUG.

Referenced by read_libblock(), and read_struct().

◆ get_bhead()

◆ has_linked_ids_to_read()

static int has_linked_ids_to_read ( Main * mainvar)
static

◆ is_minversion_older_than_blender()

static bool is_minversion_older_than_blender ( FileData * fd,
ReportList * reports )
static

◆ lib_link_all()

◆ lib_link_cb()

◆ lib_link_scenes_check_set()

static void lib_link_scenes_check_set ( Main * bmain)
static

◆ library_id_is_yet_read()

◆ library_link_begin()

◆ library_link_end()

◆ library_parent_filepath()

static const char * library_parent_filepath ( Library * lib)
static

Definition at line 233 of file readfile.cc.

References lib.

Referenced by read_library_file_data(), and read_library_linked_id().

◆ link_glob_list()

static void link_glob_list ( FileData * fd,
ListBase * lb )
static

◆ link_global()

◆ link_named_part()

◆ newdataadr()

◆ newdataadr_no_us()

static void * newdataadr_no_us ( FileData * fd,
const void * adr )
static

Definition at line 1473 of file readfile.cc.

References FileData::datamap, and oldnewmap_lookup_and_inc().

Referenced by BLO_read_get_new_data_address_no_us().

◆ newlibadr()

static void * newlibadr ( FileData * fd,
ID * ,
const bool is_linked_only,
const void * adr )
static

◆ oldnewmap_clear()

◆ oldnewmap_free()

static void oldnewmap_free ( OldNewMap * onm)
static

Definition at line 323 of file readfile.cc.

Referenced by blo_filedata_free(), and read_library_file_data().

◆ oldnewmap_insert()

static bool oldnewmap_insert ( OldNewMap * onm,
const void * oldaddr,
void * newaddr,
int nr )
static
Returns
true if the oldaddr key has been successfully added to the onm, and no existing entry was overwritten.

Definition at line 264 of file readfile.cc.

References blender::Map< Key, Value, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add_overwrite(), and OldNewMap::map.

Referenced by blo_do_versions_oldnewmap_insert(), BLO_read_data_globmap_add(), link_glob_list(), oldnewmap_lib_insert(), and read_data_into_datamap().

◆ oldnewmap_lib_insert()

static void oldnewmap_lib_insert ( FileData * fd,
const void * oldaddr,
ID * newaddr,
int id_code )
static

◆ oldnewmap_liblookup()

static void * oldnewmap_liblookup ( OldNewMap * onm,
const void * addr,
const bool is_linked_only )
static

Definition at line 296 of file readfile.cc.

References ID_IS_LINKED, and oldnewmap_lookup_and_inc().

Referenced by newlibadr().

◆ oldnewmap_lookup_and_inc()

static void * oldnewmap_lookup_and_inc ( OldNewMap * onm,
const void * addr,
bool increase_users )
static

◆ oldnewmap_new()

static OldNewMap * oldnewmap_new ( )
static

Definition at line 255 of file readfile.cc.

Referenced by filedata_new(), and read_library_file_data().

◆ peek_struct_undo()

static const void * peek_struct_undo ( FileData * fd,
BHead * bhead )
static

◆ placeholders_ensure_valid()

static void placeholders_ensure_valid ( Main * bmain)
static

◆ read_data_into_datamap()

static BHead * read_data_into_datamap ( FileData * fd,
BHead * bhead,
const char * allocname,
const int id_type_index )
static

◆ read_file_bhead_idname_map_create()

◆ read_file_dna()

◆ read_file_thumbnail()

◆ read_file_version()

◆ read_global()

◆ read_libblock()

◆ read_libblock_is_identical()

static bool read_libblock_is_identical ( FileData * fd,
BHead * bhead )
static

◆ read_libblock_undo_restore()

◆ read_libblock_undo_restore_at_old_address()

◆ read_libblock_undo_restore_identical()

◆ read_libblock_undo_restore_library()

static bool read_libblock_undo_restore_library ( FileData * fd,
Main * new_main,
const ID * id,
ID * id_old,
BHead * bhead )
static

◆ read_libblock_undo_restore_linked()

static bool read_libblock_undo_restore_linked ( FileData * fd,
Main * libmain,
const ID * id,
ID ** r_id_old,
BHead * bhead )
static

◆ read_libraries()

◆ read_library_clear_weak_links()

static void read_library_clear_weak_links ( FileData * basefd,
ListBase * mainlist,
Main * mainvar )
static

◆ read_library_file_data()

◆ read_library_linked_id()

◆ read_library_linked_ids()

◆ read_struct()

◆ read_undo_move_libmain_data()

◆ read_undo_remap_noundo_data()

◆ read_undo_remap_noundo_data_cb()

◆ read_undo_reuse_noundo_local_ids()

◆ read_userdef()

◆ sort_bhead_old_map()

static void sort_bhead_old_map ( FileData * fd)
static

◆ split_libdata()

static void split_libdata ( ListBase * lb_src,
Main ** lib_main_array,
const uint lib_main_array_len )
static

Definition at line 375 of file readfile.cc.

References BLI_addtail(), BLI_remlink(), CLOG_ERROR, Main::curlib, ListBase::first, GS, LOG, and which_libbase().

Referenced by blo_split_main().

◆ split_main_newid()

◆ switch_endian_bh4()

static void switch_endian_bh4 ( BHead4 * bhead)
static

Definition at line 627 of file readfile.cc.

References BLI_endian_switch_int32(), BLO_CODE_ENDB, BHead4::code, BHead4::len, BHead4::nr, and BHead4::SDNAnr.

Referenced by get_bhead().

◆ switch_endian_bh8()

static void switch_endian_bh8 ( BHead8 * bhead)
static

Definition at line 641 of file readfile.cc.

References BLI_endian_switch_int32(), BLO_CODE_ENDB, BHead8::code, BHead8::len, BHead8::nr, and BHead8::SDNAnr.

Referenced by get_bhead().

◆ switch_endian_structs()

static void switch_endian_structs ( const SDNA * filesdna,
BHead * bhead )
static

Definition at line 1708 of file readfile.cc.

References data, DNA_struct_size(), DNA_struct_switch_endian(), BHead::nr, and BHead::SDNAnr.

Referenced by read_struct().

◆ verg_bheadsort()

static int verg_bheadsort ( const void * v1,
const void * v2 )
static

Definition at line 3861 of file readfile.cc.

References BHeadSort::old, and v2.

Referenced by find_bhead(), and sort_bhead_old_map().

Variable Documentation

◆ LOG

◆ LOG_UNDO

CLG_LogRef LOG_UNDO = {"blo.readfile.undo"}
static