diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/BKE_customdata.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/customdata.c | 10 |
2 files changed, 9 insertions, 3 deletions
diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h index 9797aa1201f..6a3625e2133 100644 --- a/source/blender/blenkernel/BKE_customdata.h +++ b/source/blender/blenkernel/BKE_customdata.h @@ -111,7 +111,7 @@ void CustomData_merge(const struct CustomData *source, struct CustomData *dest, * then goes through the mesh and makes sure all the customdata blocks are * consistent with the new layout.*/ void CustomData_bmesh_merge(struct CustomData *source, struct CustomData *dest, - int mask, int alloctype, struct BMesh *bm, const char htype); + CustomDataMask mask, int alloctype, struct BMesh *bm, const char htype); /* frees data associated with a CustomData object (doesn't free the object * itself, though) diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c index c1d0a1674da..9a879c80b15 100644 --- a/source/blender/blenkernel/intern/customdata.c +++ b/source/blender/blenkernel/intern/customdata.c @@ -2156,13 +2156,18 @@ void CustomData_bmesh_init_pool(CustomData *data, int totelem, const char htype) } void CustomData_bmesh_merge(CustomData *source, CustomData *dest, - int mask, int alloctype, BMesh *bm, const char htype) + CustomDataMask mask, int alloctype, BMesh *bm, const char htype) { BMHeader *h; BMIter iter; - CustomData destold = *dest; + CustomData destold; void *tmp; int t; + + /* copy old layer description so that old data can be copied into + the new allocation */ + destold = *dest; + if (destold.layers) destold.layers = MEM_dupallocN(destold.layers); CustomData_merge(source, dest, mask, alloctype, 0); dest->pool = NULL; @@ -2208,6 +2213,7 @@ void CustomData_bmesh_merge(CustomData *source, CustomData *dest, } if (destold.pool) BLI_mempool_destroy(destold.pool); + if (destold.layers) MEM_freeN(destold.layers); } void CustomData_bmesh_free_block(CustomData *data, void **block) |