Blender  V2.93
readfile.h
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  * blenloader readfile private function prototypes
19  */
20 
25 #pragma once
26 
27 #ifdef WIN32
28 # include "BLI_winstuff.h"
29 #endif
30 
31 #include "DNA_sdna_types.h"
32 #include "DNA_space_types.h"
33 #include "DNA_windowmanager_types.h" /* for ReportType */
34 #include "zlib.h"
35 
36 struct BLI_mmap_file;
37 struct BLOCacheStorage;
38 struct IDNameLib_Map;
39 struct Key;
40 struct MemFile;
41 struct Object;
42 struct OldNewMap;
43 struct ReportList;
44 struct UserDef;
45 
46 typedef struct IDNameLib_Map IDNameLib_Map;
47 
52  FD_FLAGS_FILE_OK = 1 << 3,
54  /* XXX Unused in practice (checked once but never set). */
56 };
57 
58 /* Disallow since it's 32bit on ms-windows. */
59 #ifdef __GNUC__
60 # pragma GCC poison off_t
61 #endif
62 
63 #if defined(_MSC_VER) || defined(__APPLE__) || defined(__HAIKU__) || defined(__NetBSD__)
64 typedef int64_t off64_t;
65 #endif
66 
67 typedef ssize_t(FileDataReadFn)(struct FileData *filedata,
68  void *buffer,
69  size_t size,
70  bool *r_is_memchunk_identical);
71 typedef off64_t(FileDataSeekFn)(struct FileData *filedata, off64_t offset, int whence);
72 
73 typedef struct FileData {
76  enum eFileDataFlag flags;
77  bool is_eof;
78  size_t buffersize;
79  off64_t file_offset;
80 
83 
85  int filedes;
86 
88  const char *buffer;
91  struct MemFile *memfile;
94  int undo_direction; /* eUndoStepDir */
95 
97  gzFile gzfiledes;
99  z_stream strm;
100 
103 
105  struct SDNA *filesdna;
106  const struct SDNA *memsdna;
108  const char *compflags;
110 
119 
122 
130 
133  struct OldNewMap *libmap;
136 
139 
142 
147 
149  /* Counters for amount of missing libraries, and missing IDs in libraries.
150  * Used to generate a synthetic report in the UI. */
154 
155 #define SIZEOFBLENDERHEADER 12
156 
157 /***/
158 struct Main;
159 void blo_join_main(ListBase *mainlist);
160 void blo_split_main(ListBase *mainlist, struct Main *main);
161 
162 BlendFileData *blo_read_file_internal(FileData *fd, const char *filepath);
163 
164 FileData *blo_filedata_from_file(const char *filepath, struct ReportList *reports);
165 FileData *blo_filedata_from_memory(const void *mem, int memsize, struct ReportList *reports);
167  const struct BlendFileReadParams *params,
168  struct ReportList *reports);
169 
170 void blo_clear_proxy_pointers_from_lib(struct Main *oldmain);
171 void blo_make_packed_pointer_map(FileData *fd, struct Main *oldmain);
172 void blo_end_packed_pointer_map(FileData *fd, struct Main *oldmain);
173 void blo_add_library_pointer_map(ListBase *old_mainlist, FileData *fd);
174 void blo_make_old_idmap_from_main(FileData *fd, struct Main *bmain);
175 
176 BHead *blo_read_asset_data_block(FileData *fd, BHead *bhead, struct AssetMetaData **r_asset_data);
177 
178 void blo_cache_storage_init(FileData *fd, struct Main *bmain);
179 void blo_cache_storage_old_bmain_clear(FileData *fd, struct Main *bmain_old);
181 
182 void blo_filedata_free(FileData *fd);
183 
185 BHead *blo_bhead_next(FileData *fd, BHead *thisblock);
186 BHead *blo_bhead_prev(FileData *fd, BHead *thisblock);
187 
188 const char *blo_bhead_id_name(const FileData *fd, const BHead *bhead);
189 struct AssetMetaData *blo_bhead_id_asset_data_address(const FileData *fd, const BHead *bhead);
190 
191 /* do versions stuff */
192 
193 void blo_do_versions_dna(struct SDNA *sdna, const int versionfile, const int subversionfile);
194 
196  const void *oldaddr,
197  void *newaddr,
198  int nr);
199 void *blo_do_versions_newlibadr(struct FileData *fd, const void *lib, const void *adr);
200 void *blo_do_versions_newlibadr_us(struct FileData *fd, const void *lib, const void *adr);
201 
203 void blo_do_versions_key_uidgen(struct Key *key);
204 
205 void blo_do_versions_userdef(struct UserDef *userdef);
206 
207 void blo_do_versions_pre250(struct FileData *fd, struct Library *lib, struct Main *bmain);
208 void blo_do_versions_250(struct FileData *fd, struct Library *lib, struct Main *bmain);
209 void blo_do_versions_260(struct FileData *fd, struct Library *lib, struct Main *bmain);
210 void blo_do_versions_270(struct FileData *fd, struct Library *lib, struct Main *bmain);
211 void blo_do_versions_280(struct FileData *fd, struct Library *lib, struct Main *bmain);
212 void blo_do_versions_290(struct FileData *fd, struct Library *lib, struct Main *bmain);
213 void blo_do_versions_cycles(struct FileData *fd, struct Library *lib, struct Main *bmain);
214 
215 void do_versions_after_linking_250(struct Main *bmain);
216 void do_versions_after_linking_260(struct Main *bmain);
217 void do_versions_after_linking_270(struct Main *bmain);
218 void do_versions_after_linking_280(struct Main *bmain, struct ReportList *reports);
219 void do_versions_after_linking_290(struct Main *bmain, struct ReportList *reports);
220 void do_versions_after_linking_cycles(struct Main *bmain);
221 
222 /* This is rather unfortunate to have to expose this here, but better use that nasty hack in
223  * do_version than readfile itself. */
224 void *blo_read_get_new_globaldata_address(struct FileData *fd, const void *adr);
#define FILE_MAX
Compatibility-like things for windows.
SSIZE_T ssize_t
Definition: BLI_winstuff.h:87
eBLOReadSkip
Definition: BLO_readfile.h:93
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition: btDbvt.cpp:52
DRWShaderLibrary * lib
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
__kernel void ccl_constant KernelData ccl_global void ccl_global char ccl_global int ccl_global char ccl_global unsigned int ccl_global float * buffer
int main(int argc, char **argv)
Definition: msgfmt.c:457
void blo_cache_storage_init(FileData *fd, struct Main *bmain)
Definition: readfile.c:2078
void blo_cache_storage_end(FileData *fd)
Definition: readfile.c:2141
void do_versions_after_linking_250(struct Main *bmain)
BlendFileData * blo_read_file_internal(FileData *fd, const char *filepath)
Definition: readfile.c:4097
FileData * blo_filedata_from_memfile(struct MemFile *memfile, const struct BlendFileReadParams *params, struct ReportList *reports)
Definition: readfile.c:1572
void blo_cache_storage_old_bmain_clear(FileData *fd, struct Main *bmain_old)
Definition: readfile.c:2114
ssize_t() FileDataReadFn(struct FileData *filedata, void *buffer, size_t size, bool *r_is_memchunk_identical)
Definition: readfile.h:67
struct AssetMetaData * blo_bhead_id_asset_data_address(const FileData *fd, const BHead *bhead)
Definition: readfile.c:993
void blo_make_packed_pointer_map(FileData *fd, struct Main *oldmain)
Definition: readfile.c:1905
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:380
struct FileData FileData
eFileDataFlag
Definition: readfile.h:48
@ FD_FLAGS_FILE_POINTSIZE_IS_4
Definition: readfile.h:50
@ FD_FLAGS_POINTSIZE_DIFFERS
Definition: readfile.h:51
@ FD_FLAGS_NOT_MY_LIBMAP
Definition: readfile.h:55
@ FD_FLAGS_FILE_OK
Definition: readfile.h:52
@ FD_FLAGS_SWITCH_ENDIAN
Definition: readfile.h:49
@ FD_FLAGS_NOT_MY_BUFFER
Definition: readfile.h:53
void blo_do_versions_pre250(struct FileData *fd, struct Library *lib, struct Main *bmain)
void blo_do_versions_dna(struct SDNA *sdna, const int versionfile, const int subversionfile)
void blo_split_main(ListBase *mainlist, struct Main *main)
Definition: readfile.c:496
void do_versions_after_linking_290(struct Main *bmain, struct ReportList *reports)
void blo_do_versions_key_uidgen(struct Key *key)
Definition: readfile.c:2529
void blo_do_versions_250(struct FileData *fd, struct Library *lib, struct Main *bmain)
off64_t() FileDataSeekFn(struct FileData *filedata, off64_t offset, int whence)
Definition: readfile.h:71
void blo_make_old_idmap_from_main(FileData *fd, struct Main *bmain)
Definition: readfile.c:2003
void blo_clear_proxy_pointers_from_lib(struct Main *oldmain)
Definition: readfile.c:1887
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:1840
void do_versions_after_linking_260(struct Main *bmain)
void blo_do_versions_260(struct FileData *fd, struct Library *lib, struct Main *bmain)
BHead * blo_bhead_first(FileData *fd)
Definition: readfile.c:894
void do_versions_after_linking_280(struct Main *bmain, struct ReportList *reports)
BHead * blo_bhead_next(FileData *fd, BHead *thisblock)
Definition: readfile.c:922
const char * blo_bhead_id_name(const FileData *fd, const BHead *bhead)
Definition: readfile.c:987
FileData * blo_filedata_from_memory(const void *mem, int memsize, struct ReportList *reports)
Definition: readfile.c:1543
void blo_do_versions_290(struct FileData *fd, struct Library *lib, struct Main *bmain)
FileData * blo_filedata_from_file(const char *filepath, struct ReportList *reports)
Definition: readfile.c:1470
void blo_end_packed_pointer_map(FileData *fd, struct Main *oldmain)
Definition: readfile.c:1948
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:1818
void blo_filedata_free(FileData *fd)
Definition: readfile.c:1591
void blo_do_versions_270(struct FileData *fd, struct Library *lib, 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:1985
void blo_do_versions_280(struct FileData *fd, struct Library *lib, struct Main *bmain)
void blo_join_main(ListBase *mainlist)
Definition: readfile.c:462
BHead * blo_read_asset_data_block(FileData *fd, BHead *bhead, struct AssetMetaData **r_asset_data)
Definition: readfile.c:3739
void * blo_do_versions_newlibadr_us(struct FileData *fd, const void *lib, const void *adr)
__int64 int64_t
Definition: stdint.h:92
The meta-data of an asset. By creating and giving this for a data-block (ID.asset_data),...
eBLOReadSkip skip_flags
Definition: readfile.h:121
int undo_direction
Definition: readfile.h:94
size_t buffersize
Definition: readfile.h:78
struct DNA_ReconstructInfo * reconstruct_info
Definition: readfile.h:109
int id_asset_data_offset
Definition: readfile.h:116
ListBase * old_mainlist
Definition: readfile.h:145
int library_id_missing_count
Definition: readfile.h:152
enum eFileDataFlag flags
Definition: readfile.h:76
ListBase bhead_list
Definition: readfile.h:75
FileDataSeekFn * seek
Definition: readfile.h:82
int fileversion
Definition: readfile.h:111
struct OldNewMap * globmap
Definition: readfile.h:132
struct OldNewMap * libmap
Definition: readfile.h:133
int fileflags
Definition: readfile.h:118
FileDataReadFn * read
Definition: readfile.h:81
z_stream strm
Definition: readfile.h:99
ListBase * mainlist
Definition: readfile.h:143
struct MemFile * memfile
Definition: readfile.h:91
const struct SDNA * memsdna
Definition: readfile.h:106
struct SDNA * filesdna
Definition: readfile.h:105
int id_tag_extra
Definition: readfile.h:129
char relabase[FILE_MAX]
Definition: readfile.h:102
struct OldNewMap * datamap
Definition: readfile.h:131
struct ReportList * reports
Definition: readfile.h:148
struct GHash * bhead_idname_hash
Definition: readfile.h:141
const char * compflags
Definition: readfile.h:108
const char * buffer
Definition: readfile.h:88
int globalf
Definition: readfile.h:118
off64_t file_offset
Definition: readfile.h:79
int id_name_offset
Definition: readfile.h:113
bool is_eof
Definition: readfile.h:77
gzFile gzfiledes
Definition: readfile.h:97
int tot_bheadmap
Definition: readfile.h:138
struct OldNewMap * packedmap
Definition: readfile.h:134
int filedes
Definition: readfile.h:85
struct BLI_mmap_file * mmap_file
Definition: readfile.h:89
struct BLOCacheStorage * cache_storage
Definition: readfile.h:135
int library_file_missing_count
Definition: readfile.h:151
struct BHeadSort * bheadmap
Definition: readfile.h:137
struct IDNameLib_Map * old_idmap
Definition: readfile.h:146
Definition: BKE_main.h:116