[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42278] trunk/blender/source/blender: fix [#29459] Crash making a linked object group local
Campbell Barton
ideasman42 at gmail.com
Wed Nov 30 01:32:22 CET 2011
Revision: 42278
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42278
Author: campbellbarton
Date: 2011-11-30 00:32:13 +0000 (Wed, 30 Nov 2011)
Log Message:
-----------
fix [#29459] Crash making a linked object group local
was an error with make-local refactor & path updating.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_library.h
trunk/blender/source/blender/blenkernel/intern/action.c
trunk/blender/source/blender/blenkernel/intern/armature.c
trunk/blender/source/blender/blenkernel/intern/brush.c
trunk/blender/source/blender/blenkernel/intern/camera.c
trunk/blender/source/blender/blenkernel/intern/curve.c
trunk/blender/source/blender/blenkernel/intern/image.c
trunk/blender/source/blender/blenkernel/intern/lamp.c
trunk/blender/source/blender/blenkernel/intern/lattice.c
trunk/blender/source/blender/blenkernel/intern/library.c
trunk/blender/source/blender/blenkernel/intern/material.c
trunk/blender/source/blender/blenkernel/intern/mball.c
trunk/blender/source/blender/blenkernel/intern/mesh.c
trunk/blender/source/blender/blenkernel/intern/object.c
trunk/blender/source/blender/blenkernel/intern/particle.c
trunk/blender/source/blender/blenkernel/intern/speaker.c
trunk/blender/source/blender/blenkernel/intern/texture.c
trunk/blender/source/blender/blenkernel/intern/world.c
trunk/blender/source/blender/editors/space_outliner/outliner_tools.c
Modified: trunk/blender/source/blender/blenkernel/BKE_library.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_library.h 2011-11-29 23:00:10 UTC (rev 42277)
+++ trunk/blender/source/blender/blenkernel/BKE_library.h 2011-11-30 00:32:13 UTC (rev 42278)
@@ -49,7 +49,7 @@
void *copy_libblock(struct ID *id);
void copy_libblock_data(struct ID *id, const struct ID *id_from, const short do_action);
-void BKE_id_lib_local_paths(struct Main *bmain, struct ID *id);
+void BKE_id_lib_local_paths(struct Main *bmain, struct Library *lib, struct ID *id);
void id_lib_extern(struct ID *id);
void BKE_library_filepath_set(struct Library *lib, const char *filepath);
void id_us_plus(struct ID *id);
Modified: trunk/blender/source/blender/blenkernel/intern/action.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/action.c 2011-11-29 23:00:10 UTC (rev 42277)
+++ trunk/blender/source/blender/blenkernel/intern/action.c 2011-11-30 00:32:13 UTC (rev 42278)
@@ -92,8 +92,8 @@
/* temp data for make_local_action */
typedef struct tMakeLocalActionContext {
- bAction *act; /* original action */
- bAction *actn; /* new action */
+ bAction *act; /* original action */
+ bAction *act_new; /* new action */
int is_lib; /* some action users were libraries */
int is_local; /* some action users were not libraries */
@@ -117,9 +117,9 @@
if (adt->action == mlac->act) {
if (id->lib == NULL) {
- adt->action = mlac->actn;
+ adt->action = mlac->act_new;
- id_us_plus(&mlac->actn->id);
+ id_us_plus(&mlac->act_new->id);
id_us_min(&mlac->act->id);
}
}
@@ -146,10 +146,10 @@
id_clear_lib_data(bmain, &act->id);
}
else if (mlac.is_local && mlac.is_lib) {
- mlac.actn= copy_action(act);
- mlac.actn->id.us= 0;
+ mlac.act_new= copy_action(act);
+ mlac.act_new->id.us= 0;
- BKE_id_lib_local_paths(bmain, &mlac.actn->id);
+ BKE_id_lib_local_paths(bmain, act->id.lib, &mlac.act_new->id);
BKE_animdata_main_cb(bmain, make_localact_apply_cb, &mlac);
}
Modified: trunk/blender/source/blender/blenkernel/intern/armature.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/armature.c 2011-11-29 23:00:10 UTC (rev 42277)
+++ trunk/blender/source/blender/blenkernel/intern/armature.c 2011-11-30 00:32:13 UTC (rev 42278)
@@ -158,17 +158,17 @@
id_clear_lib_data(bmain, &arm->id);
}
else if(is_local && is_lib) {
- bArmature *armn= copy_armature(arm);
- armn->id.us= 0;
+ bArmature *arm_new= copy_armature(arm);
+ arm_new->id.us= 0;
/* Remap paths of new ID using old library as base. */
- BKE_id_lib_local_paths(bmain, &armn->id);
+ BKE_id_lib_local_paths(bmain, arm->id.lib, &arm_new->id);
for(ob= bmain->object.first; ob; ob= ob->id.next) {
if(ob->data == arm) {
if(ob->id.lib==NULL) {
- ob->data= armn;
- armn->id.us++;
+ ob->data= arm_new;
+ arm_new->id.us++;
arm->id.us--;
}
}
Modified: trunk/blender/source/blender/blenkernel/intern/brush.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/brush.c 2011-11-29 23:00:10 UTC (rev 42277)
+++ trunk/blender/source/blender/blenkernel/intern/brush.c 2011-11-30 00:32:13 UTC (rev 42278)
@@ -224,17 +224,17 @@
}
}
else if(is_local && is_lib) {
- Brush *brushn= copy_brush(brush);
- brushn->id.us= 1; /* only keep fake user */
- brushn->id.flag |= LIB_FAKEUSER;
+ Brush *brush_new= copy_brush(brush);
+ brush_new->id.us= 1; /* only keep fake user */
+ brush_new->id.flag |= LIB_FAKEUSER;
/* Remap paths of new ID using old library as base. */
- BKE_id_lib_local_paths(bmain, &brush->id);
+ BKE_id_lib_local_paths(bmain, brush->id.lib, &brush_new->id);
for(scene= bmain->scene.first; scene; scene=scene->id.next) {
if(paint_brush(&scene->toolsettings->imapaint.paint)==brush) {
if(scene->id.lib==NULL) {
- paint_brush_set(&scene->toolsettings->imapaint.paint, brushn);
+ paint_brush_set(&scene->toolsettings->imapaint.paint, brush_new);
}
}
}
Modified: trunk/blender/source/blender/blenkernel/intern/camera.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/camera.c 2011-11-29 23:00:10 UTC (rev 42277)
+++ trunk/blender/source/blender/blenkernel/intern/camera.c 2011-11-30 00:32:13 UTC (rev 42278)
@@ -108,18 +108,18 @@
id_clear_lib_data(bmain, &cam->id);
}
else if(is_local && is_lib) {
- Camera *camn= copy_camera(cam);
+ Camera *cam_new= copy_camera(cam);
- camn->id.us= 0;
+ cam_new->id.us= 0;
/* Remap paths of new ID using old library as base. */
- BKE_id_lib_local_paths(bmain, &camn->id);
+ BKE_id_lib_local_paths(bmain, cam->id.lib, &cam_new->id);
for(ob= bmain->object.first; ob; ob= ob->id.next) {
if(ob->data == cam) {
if(ob->id.lib==NULL) {
- ob->data= camn;
- camn->id.us++;
+ ob->data= cam_new;
+ cam_new->id.us++;
cam->id.us--;
}
}
Modified: trunk/blender/source/blender/blenkernel/intern/curve.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/curve.c 2011-11-29 23:00:10 UTC (rev 42277)
+++ trunk/blender/source/blender/blenkernel/intern/curve.c 2011-11-30 00:32:13 UTC (rev 42278)
@@ -274,16 +274,16 @@
extern_local_curve(cu);
}
else if(is_local && is_lib) {
- Curve *cun= copy_curve(cu);
- cun->id.us= 0;
+ Curve *cu_new= copy_curve(cu);
+ cu_new->id.us= 0;
- BKE_id_lib_local_paths(bmain, &cun->id);
+ BKE_id_lib_local_paths(bmain, cu->id.lib, &cu_new->id);
for(ob= bmain->object.first; ob; ob= ob->id.next) {
if(ob->data==cu) {
if(ob->id.lib==NULL) {
- ob->data= cun;
- cun->id.us++;
+ ob->data= cu_new;
+ cu_new->id.us++;
cu->id.us--;
}
}
Modified: trunk/blender/source/blender/blenkernel/intern/image.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/image.c 2011-11-29 23:00:10 UTC (rev 42277)
+++ trunk/blender/source/blender/blenkernel/intern/image.c 2011-11-30 00:32:13 UTC (rev 42278)
@@ -385,19 +385,19 @@
extern_local_image(ima);
}
else if(is_local && is_lib) {
- Image *iman= copy_image(ima);
+ Image *ima_new= copy_image(ima);
- iman->id.us= 0;
+ ima_new->id.us= 0;
/* Remap paths of new ID using old library as base. */
- BKE_id_lib_local_paths(bmain, &iman->id);
+ BKE_id_lib_local_paths(bmain, ima->id.lib, &ima_new->id);
tex= bmain->tex.first;
while(tex) {
if(tex->id.lib==NULL) {
if(tex->ima==ima) {
- tex->ima = iman;
- iman->id.us++;
+ tex->ima = ima_new;
+ ima_new->id.us++;
ima->id.us--;
}
}
@@ -407,8 +407,8 @@
while(brush) {
if(brush->id.lib==NULL) {
if(brush->clone.image==ima) {
- brush->clone.image = iman;
- iman->id.us++;
+ brush->clone.image = ima_new;
+ ima_new->id.us++;
ima->id.us--;
}
}
@@ -429,11 +429,11 @@
for(a=0; a<me->totface; a++, tface++) {
if(tface->tpage == ima) {
- tface->tpage = iman;
- if(iman->id.us == 0) {
+ tface->tpage = ima_new;
+ if(ima_new->id.us == 0) {
tface->tpage->id.us= 1;
}
- id_lib_extern((ID*)iman);
+ id_lib_extern((ID*)ima_new);
}
}
}
Modified: trunk/blender/source/blender/blenkernel/intern/lamp.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/lamp.c 2011-11-29 23:00:10 UTC (rev 42277)
+++ trunk/blender/source/blender/blenkernel/intern/lamp.c 2011-11-30 00:32:13 UTC (rev 42278)
@@ -184,19 +184,19 @@
id_clear_lib_data(bmain, &la->id);
}
else if(is_local && is_lib) {
- Lamp *lan= copy_lamp(la);
- lan->id.us= 0;
+ Lamp *la_new= copy_lamp(la);
+ la_new->id.us= 0;
/* Remap paths of new ID using old library as base. */
- BKE_id_lib_local_paths(bmain, &lan->id);
+ BKE_id_lib_local_paths(bmain, la->id.lib, &la_new->id);
ob= bmain->object.first;
while(ob) {
if(ob->data==la) {
if(ob->id.lib==NULL) {
- ob->data= lan;
- lan->id.us++;
+ ob->data= la_new;
+ la_new->id.us++;
la->id.us--;
}
}
Modified: trunk/blender/source/blender/blenkernel/intern/lattice.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/lattice.c 2011-11-29 23:00:10 UTC (rev 42277)
+++ trunk/blender/source/blender/blenkernel/intern/lattice.c 2011-11-30 00:32:13 UTC (rev 42278)
@@ -271,17 +271,17 @@
id_clear_lib_data(bmain, <->id);
}
else if(is_local && is_lib) {
- Lattice *ltn= copy_lattice(lt);
- ltn->id.us= 0;
+ Lattice *lt_new= copy_lattice(lt);
+ lt_new->id.us= 0;
/* Remap paths of new ID using old library as base. */
- BKE_id_lib_local_paths(bmain, <n->id);
+ BKE_id_lib_local_paths(bmain, lt->id.lib, <_new->id);
for(ob= bmain->object.first; ob; ob= ob->id.next) {
if(ob->data==lt) {
if(ob->id.lib==NULL) {
- ob->data= ltn;
- ltn->id.us++;
+ ob->data= lt_new;
+ lt_new->id.us++;
lt->id.us--;
}
}
Modified: trunk/blender/source/blender/blenkernel/intern/library.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/library.c 2011-11-29 23:00:10 UTC (rev 42277)
+++ trunk/blender/source/blender/blenkernel/intern/library.c 2011-11-30 00:32:13 UTC (rev 42278)
@@ -136,9 +136,9 @@
* from id_make_local() but then the make local functions would not be self
* contained.
* also note that the id _must_ have a library - campbell */
-void BKE_id_lib_local_paths(Main *bmain, ID *id)
+void BKE_id_lib_local_paths(Main *bmain, Library *lib, ID *id)
{
- char *bpath_user_data[2]= {bmain->name, (id)->lib->filepath};
+ char *bpath_user_data[2]= {bmain->name, lib->filepath};
bpath_traverse_id(bmain, id,
bpath_relocate_visitor,
@@ -1278,7 +1278,7 @@
don't have other library users. */
void id_clear_lib_data(Main *bmain, ID *id)
{
- BKE_id_lib_local_paths(bmain, id);
+ BKE_id_lib_local_paths(bmain, id->lib, id);
id->lib= NULL;
id->flag= LIB_LOCAL;
Modified: trunk/blender/source/blender/blenkernel/intern/material.c
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list