Refactor: use new api to simplify IDP_DirectLinkGroup_OrFree

This commit is contained in:
Jacques Lucke 2020-06-07 11:34:23 +02:00
parent b8afd4e8bb
commit 5ff8a2ca0e
1 changed files with 21 additions and 40 deletions

View File

@ -2647,8 +2647,8 @@ static void IDP_DirectLinkProperty(IDProperty *prop, int switch_endian, FileData
}
}
#define IDP_DirectLinkGroup_OrFree(prop, switch_endian, fd) \
_IDP_DirectLinkGroup_OrFree(prop, switch_endian, fd, __func__)
#define IDP_DirectLinkGroup_OrFree(prop, reader) \
_IDP_DirectLinkGroup_OrFree(prop, BLO_read_requires_endian_switch(reader), reader->fd, __func__)
static void _IDP_DirectLinkGroup_OrFree(IDProperty **prop,
int switch_endian,
@ -2921,8 +2921,7 @@ static void direct_link_id_common(
if (id->properties) {
BLO_read_data_address(reader, &id->properties);
/* this case means the data was written incorrectly, it should not happen */
IDP_DirectLinkGroup_OrFree(
&id->properties, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&id->properties, reader);
}
id->flag &= ~LIB_INDIRECT_WEAK_LINK;
@ -3300,8 +3299,7 @@ static void direct_link_fmodifiers(BlendDataReader *reader, ListBase *list, FCur
FMod_Python *data = (FMod_Python *)fcm->data;
BLO_read_data_address(reader, &data->prop);
IDP_DirectLinkGroup_OrFree(
&data->prop, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&data->prop, reader);
break;
}
@ -3636,8 +3634,7 @@ static void direct_link_workspace(BlendDataReader *reader, WorkSpace *workspace,
LISTBASE_FOREACH (bToolRef *, tref, &workspace->tools) {
tref->runtime = NULL;
BLO_read_data_address(reader, &tref->properties);
IDP_DirectLinkGroup_OrFree(
&tref->properties, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&tref->properties, reader);
}
workspace->status_text = NULL;
@ -3741,8 +3738,7 @@ static void lib_link_nodetree(FileData *fd, Main *UNUSED(bmain), bNodeTree *ntre
static void direct_link_node_socket(BlendDataReader *reader, bNodeSocket *sock)
{
BLO_read_data_address(reader, &sock->prop);
IDP_DirectLinkGroup_OrFree(
&sock->prop, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&sock->prop, reader);
BLO_read_data_address(reader, &sock->link);
sock->typeinfo = NULL;
@ -3778,8 +3774,7 @@ static void direct_link_nodetree(BlendDataReader *reader, bNodeTree *ntree)
BLO_read_list(reader, &node->outputs);
BLO_read_data_address(reader, &node->prop);
IDP_DirectLinkGroup_OrFree(
&node->prop, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&node->prop, reader);
BLO_read_list(reader, &node->internal_links);
for (link = node->internal_links.first; link; link = link->next) {
@ -3979,8 +3974,7 @@ static void direct_link_constraints(BlendDataReader *reader, ListBase *lb)
BLO_read_list(reader, &data->targets);
BLO_read_data_address(reader, &data->prop);
IDP_DirectLinkGroup_OrFree(
&data->prop, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&data->prop, reader);
break;
}
case CONSTRAINT_TYPE_ARMATURE: {
@ -4101,8 +4095,7 @@ static void direct_link_bones(BlendDataReader *reader, Bone *bone)
BLO_read_data_address(reader, &bone->parent);
BLO_read_data_address(reader, &bone->prop);
IDP_DirectLinkGroup_OrFree(
&bone->prop, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&bone->prop, reader);
BLO_read_data_address(reader, &bone->bbone_next);
BLO_read_data_address(reader, &bone->bbone_prev);
@ -5496,8 +5489,7 @@ static void direct_link_pose(BlendDataReader *reader, bPose *pose)
direct_link_constraints(reader, &pchan->constraints);
BLO_read_data_address(reader, &pchan->prop);
IDP_DirectLinkGroup_OrFree(
&pchan->prop, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&pchan->prop, reader);
BLO_read_data_address(reader, &pchan->mpath);
if (pchan->mpath) {
@ -6322,8 +6314,7 @@ static void direct_link_view_layer(BlendDataReader *reader, ViewLayer *view_laye
BLO_read_data_address(reader, &view_layer->active_collection);
BLO_read_data_address(reader, &view_layer->id_properties);
IDP_DirectLinkGroup_OrFree(
&view_layer->id_properties, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&view_layer->id_properties, reader);
BLO_read_list(reader, &(view_layer->freestyle_config.modules));
BLO_read_list(reader, &(view_layer->freestyle_config.linesets));
@ -6561,8 +6552,7 @@ static void direct_link_view3dshading(BlendDataReader *reader, View3DShading *sh
{
if (shading->prop) {
BLO_read_data_address(reader, &shading->prop);
IDP_DirectLinkGroup_OrFree(
&shading->prop, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&shading->prop, reader);
}
}
@ -6989,8 +6979,7 @@ static void direct_link_scene(BlendDataReader *reader, Scene *sce)
}
BLO_read_data_address(reader, &seq->prop);
IDP_DirectLinkGroup_OrFree(
&seq->prop, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&seq->prop, reader);
BLO_read_data_address(reader, &seq->strip);
if (seq->strip && seq->strip->done == 0) {
@ -7084,8 +7073,7 @@ static void direct_link_scene(BlendDataReader *reader, Scene *sce)
}
if (sce->r.ffcodecdata.properties) {
BLO_read_data_address(reader, &sce->r.ffcodecdata.properties);
IDP_DirectLinkGroup_OrFree(
&sce->r.ffcodecdata.properties, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&sce->r.ffcodecdata.properties, reader);
}
BLO_read_list(reader, &(sce->markers));
@ -7095,8 +7083,7 @@ static void direct_link_scene(BlendDataReader *reader, Scene *sce)
for (srl = sce->r.layers.first; srl; srl = srl->next) {
BLO_read_data_address(reader, &srl->prop);
IDP_DirectLinkGroup_OrFree(
&srl->prop, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&srl->prop, reader);
BLO_read_list(reader, &(srl->freestyleConfig.modules));
BLO_read_list(reader, &(srl->freestyleConfig.linesets));
}
@ -7184,8 +7171,7 @@ static void direct_link_scene(BlendDataReader *reader, Scene *sce)
direct_link_view3dshading(reader, &sce->display.shading);
BLO_read_data_address(reader, &sce->layer_properties);
IDP_DirectLinkGroup_OrFree(
&sce->layer_properties, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&sce->layer_properties, reader);
}
/** \} */
@ -7316,8 +7302,7 @@ static void direct_link_region(BlendDataReader *reader, ARegion *region, int spa
ui_list->type = NULL;
ui_list->dyn_data = NULL;
BLO_read_data_address(reader, &ui_list->properties);
IDP_DirectLinkGroup_OrFree(
&ui_list->properties, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&ui_list->properties, reader);
}
BLO_read_list(reader, &region->ui_previews);
@ -10227,8 +10212,7 @@ static void lib_link_all(FileData *fd, Main *bmain)
static void direct_link_keymapitem(BlendDataReader *reader, wmKeyMapItem *kmi)
{
BLO_read_data_address(reader, &kmi->properties);
IDP_DirectLinkGroup_OrFree(
&kmi->properties, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&kmi->properties, reader);
kmi->ptr = NULL;
kmi->flag &= ~KMI_UPDATE;
}
@ -10287,8 +10271,7 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead)
LISTBASE_FOREACH (wmKeyConfigPref *, kpt, &user->user_keyconfig_prefs) {
BLO_read_data_address(reader, &kpt->prop);
IDP_DirectLinkGroup_OrFree(
&kpt->prop, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&kpt->prop, reader);
}
LISTBASE_FOREACH (bUserMenu *, um, &user->user_menus) {
@ -10297,16 +10280,14 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead)
if (umi->type == USER_MENU_TYPE_OPERATOR) {
bUserMenuItem_Op *umi_op = (bUserMenuItem_Op *)umi;
BLO_read_data_address(reader, &umi_op->prop);
IDP_DirectLinkGroup_OrFree(
&umi_op->prop, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&umi_op->prop, reader);
}
}
}
for (addon = user->addons.first; addon; addon = addon->next) {
BLO_read_data_address(reader, &addon->prop);
IDP_DirectLinkGroup_OrFree(
&addon->prop, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
IDP_DirectLinkGroup_OrFree(&addon->prop, reader);
}
// XXX