Blender V4.5
readfile.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9
10#pragma once
11
12#include <cstdio> /* IWYU pragma: keep. Include header using off_t before poisoning it below. */
13#include <optional>
14
15#ifdef WIN32
16# include "BLI_winstuff.h"
17#endif
18
19#include "BLI_filereader.h"
20#include "BLI_map.hh"
21
22#include "DNA_sdna_types.h"
23#include "DNA_space_types.h"
24
25#include "BLO_core_bhead.hh"
27#include "BLO_readfile.hh"
28
29struct BlendFileData;
33struct BLOCacheStorage;
34struct BHeadSort;
36struct IDNameLib_Map;
37struct Key;
38struct Main;
39struct MemFile;
40struct Object;
41struct OldNewMap;
42struct UserDef;
43
65
66/* Disallow since it's 32bit on ms-windows. */
67#ifdef __GNUC__
68# pragma GCC poison off_t
69#endif
70
77struct FileData {
81 bool is_eof = false;
83
84 FileReader *file = nullptr;
85
92
100 char relabase[FILE_MAX] = {};
101
103 SDNA *filesdna = nullptr;
104 const SDNA *memsdna = nullptr;
106 const char *compflags = nullptr;
108
109 int fileversion = 0;
116 int globalf = 0;
117 int fileflags = 0;
118
121
129
130 OldNewMap *datamap = nullptr;
131 OldNewMap *globmap = nullptr;
132
138 OldNewMap *libmap = nullptr;
139
141
142 BHeadSort *bheadmap = nullptr;
144
145 std::optional<blender::Map<blender::StringRefNull, BHead *>> bhead_idname_map;
146
147 ListBase *mainlist = nullptr;
164
166
168 void *storage_handle = nullptr;
169};
170
171/***/
172void blo_join_main(ListBase *mainlist);
173void blo_split_main(ListBase *mainlist, Main *main);
174
176
183FileData *blo_filedata_from_memory(const void *mem, int memsize, BlendFileReadReport *reports);
187
193
195 ATTR_NONNULL(1, 2);
196
200
202
204BHead *blo_bhead_next(FileData *fd, BHead *thisblock) ATTR_NONNULL(1);
206
213const char *blo_bhead_id_name(FileData *fd, const BHead *bhead);
218
219/* do versions stuff */
220
230void blo_do_versions_dna(SDNA *sdna, int versionfile, int subversionfile);
231
232void blo_do_versions_oldnewmap_insert(OldNewMap *onm, const void *oldaddr, void *newaddr, int nr);
237 ID *self_id,
238 const bool is_linked_only,
239 const void *adr);
240
247
251void blo_do_versions_userdef(UserDef *userdef);
252
254void blo_do_versions_250(FileData *fd, Library *lib, Main *bmain);
255void blo_do_versions_260(FileData *fd, Library *lib, Main *bmain);
256void blo_do_versions_270(FileData *fd, Library *lib, Main *bmain);
257void blo_do_versions_280(FileData *fd, Library *lib, Main *bmain);
258void blo_do_versions_290(FileData *fd, Library *lib, Main *bmain);
259void blo_do_versions_300(FileData *fd, Library *lib, Main *bmain);
260void blo_do_versions_400(FileData *fd, Library *lib, Main *bmain);
261void blo_do_versions_410(FileData *fd, Library *lib, Main *bmain);
262void blo_do_versions_420(FileData *fd, Library *lib, Main *bmain);
263void blo_do_versions_430(FileData *fd, Library *lib, Main *bmain);
264void blo_do_versions_440(FileData *fd, Library *lib, Main *bmain);
265void blo_do_versions_450(FileData *fd, Library *lib, Main *bmain);
266
279
281 BlendfileLinkAppendContext *lapp_context,
283
290void *blo_read_get_new_globaldata_address(FileData *fd, const void *adr) ATTR_NONNULL(1);
291
292/* Mark the Main data as invalid (.blend file reading should be aborted ASAP, and the already read
293 * data should be discarded). Also add an error report to `fd` including given `message`. */
294void blo_readfile_invalidate(FileData *fd, Main *bmain, const char *message) ATTR_NONNULL(1, 2, 3);
#define ATTR_NONNULL(...)
Wrapper for reading from various sources (e.g. raw files, compressed files, memory....
#define FILE_MAX
#define ENUM_OPERATORS(_type, _max)
Compatibility-like things for windows.
external readfile function prototypes.
eBLOReadSkip
@ BLO_READ_SKIP_NONE
ReportList * reports
Definition WM_types.hh:1025
BKE_main_namemap_clear * new_bmain
Definition blendfile.cc:603
#define main()
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void blo_do_versions_oldnewmap_insert(OldNewMap *onm, const void *oldaddr, void *newaddr, int nr)
Definition readfile.cc:282
void * blo_do_versions_newlibadr(FileData *fd, ID *self_id, const bool is_linked_only, const void *adr)
Definition readfile.cc:1534
FileData * blo_filedata_from_memory(const void *mem, int memsize, BlendFileReadReport *reports)
Definition readfile.cc:1361
void blo_do_versions_400(FileData *fd, Library *lib, Main *bmain)
void blo_do_versions_300(FileData *fd, Library *lib, Main *bmain)
void blo_do_version_old_trackto_to_constraints(Object *ob)
void blo_readfile_invalidate(FileData *fd, Main *bmain, const char *message) ATTR_NONNULL(1
void do_versions_after_linking_450(FileData *fd, Main *bmain)
void do_versions_after_linking_300(FileData *fd, Main *bmain)
void BHead void void blo_cache_storage_old_bmain_clear(FileData *fd, Main *bmain_old) ATTR_NONNULL(1
void blo_do_versions_dna(SDNA *sdna, int versionfile, int subversionfile)
void blo_do_versions_450(FileData *fd, Library *lib, Main *bmain)
void do_versions_after_linking_410(FileData *fd, Main *bmain)
void blo_do_versions_250(FileData *fd, Library *lib, Main *bmain)
void BHead void blo_cache_storage_init(FileData *fd, Main *bmain) ATTR_NONNULL(1
void blo_do_versions_410(FileData *fd, Library *lib, Main *bmain)
void do_versions_after_linking_400(FileData *fd, Main *bmain)
void do_versions_after_linking_430(FileData *fd, Main *bmain)
void do_versions_after_linking_250(Main *bmain)
void do_versions_after_linking_290(FileData *fd, Main *bmain)
BHead * blo_bhead_next(FileData *fd, BHead *thisblock) ATTR_NONNULL(1)
Definition readfile.cc:745
eFileDataFlag
Definition readfile.hh:47
@ FD_FLAGS_FILE_POINTSIZE_IS_4
Definition readfile.hh:49
@ FD_FLAGS_POINTSIZE_DIFFERS
Definition readfile.hh:50
@ FD_FLAGS_IS_MEMFILE
Definition readfile.hh:52
@ FD_FLAGS_FILE_OK
Definition readfile.hh:51
@ FD_FLAGS_SWITCH_ENDIAN
Definition readfile.hh:48
@ FD_FLAGS_FILE_FUTURE
Definition readfile.hh:57
@ FD_FLAGS_HAS_INVALID_ID_NAMES
Definition readfile.hh:62
void do_versions_after_linking_440(FileData *fd, Main *bmain)
void do_versions_after_linking_420(FileData *fd, Main *bmain)
void blo_do_versions_userdef(UserDef *userdef)
AssetMetaData * blo_bhead_id_asset_data_address(const FileData *fd, const BHead *bhead)
Definition readfile.cc:829
FileData * blo_filedata_from_memfile(MemFile *memfile, const BlendFileReadParams *params, BlendFileReadReport *reports)
Definition readfile.cc:1393
BlendFileData FileData * blo_filedata_from_file(const char *filepath, BlendFileReadReport *reports)
Definition readfile.cc:1331
void BHead void void void blo_cache_storage_end(FileData *fd) ATTR_NONNULL(1)
Definition readfile.cc:1771
void blo_do_versions_420(FileData *fd, Library *lib, Main *bmain)
void do_versions_after_linking_280(FileData *fd, Main *bmain)
void blo_do_versions_290(FileData *fd, Library *lib, Main *bmain)
BHead const char * blo_bhead_id_name(FileData *fd, const BHead *bhead)
Definition readfile.cc:816
void blo_filedata_free(FileData *fd) ATTR_NONNULL(1)
Definition readfile.cc:1410
void blo_do_versions_270(FileData *fd, Library *lib, Main *bmain)
void do_versions_after_linking_270(Main *bmain)
void BHead * blo_read_asset_data_block(FileData *fd, BHead *bhead, AssetMetaData **r_asset_data) ATTR_NONNULL(1
BHead * blo_bhead_first(FileData *fd) ATTR_NONNULL(1)
Definition readfile.cc:717
void blo_split_main(ListBase *mainlist, Main *main)
Definition readfile.cc:402
void blo_do_versions_key_uidgen(Key *key)
Definition readfile.cc:2405
BHead * blo_bhead_prev(FileData *fd, BHead *thisblock) ATTR_NONNULL(1
void blo_do_versions_440(FileData *fd, Library *lib, Main *bmain)
void do_versions_after_setup(Main *new_bmain, BlendfileLinkAppendContext *lapp_context, BlendFileReadReport *reports)
BlendFileData * blo_read_file_internal(FileData *fd, const char *filepath) ATTR_NONNULL(1
void blo_do_versions_430(FileData *fd, Library *lib, Main *bmain)
void do_versions_after_linking_260(Main *bmain)
void blo_do_versions_260(FileData *fd, Library *lib, Main *bmain)
void * blo_read_get_new_globaldata_address(FileData *fd, const void *adr) ATTR_NONNULL(1)
Definition readfile.cc:1523
void blo_make_old_idmap_from_main(FileData *fd, Main *bmain) ATTR_NONNULL(1
void blo_do_versions_pre250(FileData *fd, Library *lib, Main *bmain)
void blo_do_versions_280(FileData *fd, Library *lib, Main *bmain)
void blo_join_main(ListBase *mainlist)
Definition readfile.cc:355
The meta-data of an asset. By creating and giving this for a data-block (ID.asset_data),...
eBLOReadSkip skip_flags
Definition readfile.hh:120
int undo_direction
Definition readfile.hh:91
int id_asset_data_offset
Definition readfile.hh:114
ListBase * old_mainlist
Definition readfile.hh:149
enum eFileDataFlag flags
Definition readfile.hh:80
ListBase bhead_list
Definition readfile.hh:79
int fileversion
Definition readfile.hh:109
BlenderHeader blender_header
Definition readfile.hh:82
void * storage_handle
Definition readfile.hh:168
int fileflags
Definition readfile.hh:117
DNA_ReconstructInfo * reconstruct_info
Definition readfile.hh:107
BHeadSort * bheadmap
Definition readfile.hh:142
ListBase * mainlist
Definition readfile.hh:147
std::optional< blender::Map< blender::StringRefNull, BHead * > > bhead_idname_map
Definition readfile.hh:145
IDNameLib_Map * new_idmap_uid
Definition readfile.hh:163
OldNewMap * globmap
Definition readfile.hh:131
OldNewMap * datamap
Definition readfile.hh:130
int id_tag_extra
Definition readfile.hh:128
FileReader * file
Definition readfile.hh:84
char relabase[FILE_MAX]
Definition readfile.hh:100
const char * compflags
Definition readfile.hh:106
BLOCacheStorage * cache_storage
Definition readfile.hh:140
int globalf
Definition readfile.hh:116
int id_name_offset
Definition readfile.hh:111
OldNewMap * libmap
Definition readfile.hh:138
BlendFileReadReport * reports
Definition readfile.hh:165
bool is_eof
Definition readfile.hh:81
int tot_bheadmap
Definition readfile.hh:143
const SDNA * memsdna
Definition readfile.hh:104
IDNameLib_Map * old_idmap_uid
Definition readfile.hh:153
SDNA * filesdna
Definition readfile.hh:103
Definition DNA_ID.h:404
static DynamicLibrary lib