From fbc12e6cc5ea72215ade0ac3405c50ca7c89e29c Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 10 Sep 2020 14:35:09 +0200 Subject: Cleanup: extract functions for PackedFile .blend I/O --- source/blender/blenkernel/intern/packedFile.c | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'source/blender/blenkernel/intern/packedFile.c') diff --git a/source/blender/blenkernel/intern/packedFile.c b/source/blender/blenkernel/intern/packedFile.c index 6793f5e1169..ac3686a021b 100644 --- a/source/blender/blenkernel/intern/packedFile.c +++ b/source/blender/blenkernel/intern/packedFile.c @@ -51,6 +51,8 @@ #include "BKE_sound.h" #include "BKE_volume.h" +#include "BLO_read_write.h" + int BKE_packedfile_seek(PackedFile *pf, int offset, int whence) { int oldseek = -1, seek = 0; @@ -852,3 +854,29 @@ void BKE_packedfile_id_unpack(Main *bmain, ID *id, ReportList *reports, enum ePF break; } } + +void BKE_packedfile_blend_write(BlendWriter *writer, PackedFile *pf) +{ + if (pf == NULL) { + return; + } + BLO_write_struct(writer, PackedFile, pf); + BLO_write_raw(writer, pf->size, pf->data); +} + +void BKE_packedfile_blend_read(BlendDataReader *reader, PackedFile **pf_p) +{ + BLO_read_packed_address(reader, pf_p); + PackedFile *pf = *pf_p; + if (pf == NULL) { + return; + } + + BLO_read_packed_address(reader, &pf->data); + if (pf->data == NULL) { + /* We cannot allow a PackedFile with a NULL data field, + * the whole code assumes this is not possible. See T70315. */ + printf("%s: NULL packedfile data, cleaning up...\n", __func__); + MEM_SAFE_FREE(pf); + } +} -- cgit v1.2.3