Blender  V3.3
readfile.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2001-2002 NaN Holding BV. All rights reserved. */
3 
9 #pragma once
10 
11 #ifdef WIN32
12 # include "BLI_winstuff.h"
13 #endif
14 
15 #include "BLI_filereader.h"
16 #include "DNA_sdna_types.h"
17 #include "DNA_space_types.h"
18 #include "DNA_windowmanager_types.h" /* for eReportType */
19 
20 struct BLI_mmap_file;
21 struct BLOCacheStorage;
22 struct IDNameLib_Map;
23 struct Key;
24 struct MemFile;
25 struct Object;
26 struct OldNewMap;
27 struct ReportList;
28 struct UserDef;
29 
30 typedef struct IDNameLib_Map IDNameLib_Map;
31 
36  FD_FLAGS_FILE_OK = 1 << 3,
38  /* XXX Unused in practice (checked once but never set). */
40 };
41 
42 /* Disallow since it's 32bit on ms-windows. */
43 #ifdef __GNUC__
44 # pragma GCC poison off_t
45 #endif
46 
47 typedef struct FileData {
50  enum eFileDataFlag flags;
51  bool is_eof;
52 
54 
57  int undo_direction; /* eUndoStepDir */
58 
61 
63  struct SDNA *filesdna;
64  const struct SDNA *memsdna;
66  const char *compflags;
68 
77 
80 
88 
89  struct OldNewMap *datamap;
90  struct OldNewMap *globmap;
91  struct OldNewMap *libmap;
94 
97 
100 
105 
108 
109 #define SIZEOFBLENDERHEADER 12
110 
111 /***/
112 struct Main;
113 void blo_join_main(ListBase *mainlist);
114 void blo_split_main(ListBase *mainlist, struct Main *main);
115 
117 
123 FileData *blo_filedata_from_file(const char *filepath, struct BlendFileReadReport *reports);
124 FileData *blo_filedata_from_memory(const void *mem,
125  int memsize,
126  struct BlendFileReadReport *reports);
128  const struct BlendFileReadParams *params,
129  struct BlendFileReadReport *reports);
130 
131 void blo_make_packed_pointer_map(FileData *fd, struct Main *oldmain);
136 void blo_end_packed_pointer_map(FileData *fd, struct Main *oldmain);
140 void blo_add_library_pointer_map(ListBase *old_mainlist, FileData *fd);
145 void blo_make_old_idmap_from_main(FileData *fd, struct Main *bmain);
146 
147 BHead *blo_read_asset_data_block(FileData *fd, BHead *bhead, struct AssetMetaData **r_asset_data);
148 
149 void blo_cache_storage_init(FileData *fd, struct Main *bmain);
150 void blo_cache_storage_old_bmain_clear(FileData *fd, struct Main *bmain_old);
152 
153 void blo_filedata_free(FileData *fd);
154 
156 BHead *blo_bhead_next(FileData *fd, BHead *thisblock);
157 BHead *blo_bhead_prev(FileData *fd, BHead *thisblock);
158 
162 const char *blo_bhead_id_name(const FileData *fd, const BHead *bhead);
166 struct AssetMetaData *blo_bhead_id_asset_data_address(const FileData *fd, const BHead *bhead);
167 
168 /* do versions stuff */
169 
179 void blo_do_versions_dna(struct SDNA *sdna, int versionfile, int subversionfile);
180 
182  const void *oldaddr,
183  void *newaddr,
184  int nr);
188 void *blo_do_versions_newlibadr(struct FileData *fd, const void *lib, const void *adr);
189 void *blo_do_versions_newlibadr_us(struct FileData *fd, const void *lib, const void *adr);
190 
196 void blo_do_versions_key_uidgen(struct Key *key);
197 
201 void blo_do_versions_userdef(struct UserDef *userdef);
202 
203 void blo_do_versions_pre250(struct FileData *fd, struct Library *lib, struct Main *bmain);
204 void blo_do_versions_250(struct FileData *fd, struct Library *lib, struct Main *bmain);
205 void blo_do_versions_260(struct FileData *fd, struct Library *lib, struct Main *bmain);
206 void blo_do_versions_270(struct FileData *fd, struct Library *lib, struct Main *bmain);
207 void blo_do_versions_280(struct FileData *fd, struct Library *lib, struct Main *bmain);
208 void blo_do_versions_290(struct FileData *fd, struct Library *lib, struct Main *bmain);
209 void blo_do_versions_300(struct FileData *fd, struct Library *lib, struct Main *bmain);
210 void blo_do_versions_cycles(struct FileData *fd, struct Library *lib, struct Main *bmain);
211 
212 void do_versions_after_linking_250(struct Main *bmain);
213 void do_versions_after_linking_260(struct Main *bmain);
214 void do_versions_after_linking_270(struct Main *bmain);
215 void do_versions_after_linking_280(struct FileData *fd, struct Main *bmain);
216 void do_versions_after_linking_290(struct FileData *fd, struct Main *bmain);
217 void do_versions_after_linking_300(struct FileData *fd, struct Main *bmain);
218 void do_versions_after_linking_cycles(struct Main *bmain);
219 
226 void *blo_read_get_new_globaldata_address(struct FileData *fd, const void *adr);
227 
228 /* Mark the Main data as invalid (.blend file reading should be aborted ASAP, and the already read
229  * data should be discarded). Also add an error report to `fd` including given `message`. */
230 void blo_readfile_invalidate(struct FileData *fd, struct Main *bmain, const char *message);
Wrapper for reading from various sources (e.g. raw files, compressed files, memory....
#define FILE_MAX
Compatibility-like things for windows.
eBLOReadSkip
Definition: BLO_readfile.h:120
int main(int argc, char *argv[])
DRWShaderLibrary * lib
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void blo_cache_storage_init(FileData *fd, struct Main *bmain)
Definition: readfile.c:1861
void blo_cache_storage_end(FileData *fd)
Definition: readfile.c:1924
void do_versions_after_linking_250(struct Main *bmain)
FileData * blo_filedata_from_file(const char *filepath, struct BlendFileReadReport *reports)
Definition: readfile.c:1357
FileData * blo_filedata_from_memfile(struct MemFile *memfile, const struct BlendFileReadParams *params, struct BlendFileReadReport *reports)
Definition: readfile.c:1416
BlendFileData * blo_read_file_internal(FileData *fd, const char *filepath)
Definition: readfile.c:3963
void do_versions_after_linking_300(struct FileData *fd, struct Main *bmain)
void blo_cache_storage_old_bmain_clear(FileData *fd, struct Main *bmain_old)
Definition: readfile.c:1897
void blo_do_versions_300(struct FileData *fd, struct Library *lib, struct Main *bmain)
struct AssetMetaData * blo_bhead_id_asset_data_address(const FileData *fd, const BHead *bhead)
Definition: readfile.c:1036
void blo_make_packed_pointer_map(FileData *fd, struct Main *oldmain)
Definition: readfile.c:1682
BHead * blo_bhead_prev(FileData *fd, BHead *thisblock)
void blo_do_versions_oldnewmap_insert(struct OldNewMap *onm, const void *oldaddr, void *newaddr, int nr)
Definition: readfile.c:368
struct FileData FileData
eFileDataFlag
Definition: readfile.h:32
@ FD_FLAGS_FILE_POINTSIZE_IS_4
Definition: readfile.h:34
@ FD_FLAGS_POINTSIZE_DIFFERS
Definition: readfile.h:35
@ FD_FLAGS_NOT_MY_LIBMAP
Definition: readfile.h:39
@ FD_FLAGS_IS_MEMFILE
Definition: readfile.h:37
@ FD_FLAGS_FILE_OK
Definition: readfile.h:36
@ FD_FLAGS_SWITCH_ENDIAN
Definition: readfile.h:33
void blo_do_versions_pre250(struct FileData *fd, struct Library *lib, struct Main *bmain)
void blo_split_main(ListBase *mainlist, struct Main *main)
Definition: readfile.c:496
void blo_do_versions_key_uidgen(struct Key *key)
Definition: readfile.c:2323
void blo_do_versions_250(struct FileData *fd, struct Library *lib, struct Main *bmain)
void blo_do_versions_dna(struct SDNA *sdna, int versionfile, int subversionfile)
void blo_make_old_idmap_from_main(FileData *fd, struct Main *bmain)
Definition: readfile.c:1775
void blo_do_versions_cycles(struct FileData *fd, struct Library *lib, struct Main *bmain)
void do_versions_after_linking_270(struct Main *bmain)
void blo_do_version_old_trackto_to_constraints(struct Object *ob)
void * blo_do_versions_newlibadr(struct FileData *fd, const void *lib, const void *adr)
Definition: readfile.c:1632
void blo_readfile_invalidate(struct FileData *fd, struct Main *bmain, const char *message)
Definition: readfile.c:693
void do_versions_after_linking_260(struct Main *bmain)
void blo_do_versions_260(struct FileData *fd, struct Library *lib, struct Main *bmain)
void do_versions_after_linking_290(struct FileData *fd, struct Main *bmain)
BHead * blo_bhead_first(FileData *fd)
Definition: readfile.c:937
BHead * blo_bhead_next(FileData *fd, BHead *thisblock)
Definition: readfile.c:965
const char * blo_bhead_id_name(const FileData *fd, const BHead *bhead)
Definition: readfile.c:1031
void blo_do_versions_290(struct FileData *fd, struct Library *lib, struct Main *bmain)
void blo_end_packed_pointer_map(FileData *fd, struct Main *oldmain)
Definition: readfile.c:1723
FileData * blo_filedata_from_memory(const void *mem, int memsize, struct BlendFileReadReport *reports)
Definition: readfile.c:1386
void do_versions_after_linking_cycles(struct Main *bmain)
void * blo_read_get_new_globaldata_address(struct FileData *fd, const void *adr)
Definition: readfile.c:1611
void blo_filedata_free(FileData *fd)
Definition: readfile.c:1433
void blo_do_versions_270(struct FileData *fd, struct Library *lib, struct Main *bmain)
void do_versions_after_linking_280(struct FileData *fd, struct Main *bmain)
void blo_do_versions_userdef(struct UserDef *userdef)
void blo_add_library_pointer_map(ListBase *old_mainlist, FileData *fd)
Definition: readfile.c:1759
void blo_do_versions_280(struct FileData *fd, struct Library *lib, struct Main *bmain)
void blo_join_main(ListBase *mainlist)
Definition: readfile.c:455
BHead * blo_read_asset_data_block(FileData *fd, BHead *bhead, struct AssetMetaData **r_asset_data)
Definition: readfile.c:3558
void * blo_do_versions_newlibadr_us(struct FileData *fd, const void *lib, const void *adr)
The meta-data of an asset. By creating and giving this for a data-block (ID.asset_data),...
eBLOReadSkip skip_flags
Definition: readfile.h:79
int undo_direction
Definition: readfile.h:57
struct DNA_ReconstructInfo * reconstruct_info
Definition: readfile.h:67
int id_asset_data_offset
Definition: readfile.h:74
ListBase * old_mainlist
Definition: readfile.h:103
enum eFileDataFlag flags
Definition: readfile.h:50
ListBase bhead_list
Definition: readfile.h:49
int fileversion
Definition: readfile.h:69
struct OldNewMap * globmap
Definition: readfile.h:90
struct BlendFileReadReport * reports
Definition: readfile.h:106
struct OldNewMap * libmap
Definition: readfile.h:91
int fileflags
Definition: readfile.h:76
ListBase * mainlist
Definition: readfile.h:101
const struct SDNA * memsdna
Definition: readfile.h:64
struct SDNA * filesdna
Definition: readfile.h:63
int id_tag_extra
Definition: readfile.h:87
FileReader * file
Definition: readfile.h:53
char relabase[FILE_MAX]
Definition: readfile.h:60
struct OldNewMap * datamap
Definition: readfile.h:89
struct GHash * bhead_idname_hash
Definition: readfile.h:99
const char * compflags
Definition: readfile.h:66
int globalf
Definition: readfile.h:76
int id_name_offset
Definition: readfile.h:71
bool is_eof
Definition: readfile.h:51
int tot_bheadmap
Definition: readfile.h:96
struct OldNewMap * packedmap
Definition: readfile.h:92
struct BLOCacheStorage * cache_storage
Definition: readfile.h:93
struct BHeadSort * bheadmap
Definition: readfile.h:95
struct IDNameLib_Map * old_idmap
Definition: readfile.h:104
Definition: BKE_main.h:121
char filepath[1024]
Definition: BKE_main.h:124