diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/blender.c | 7 | ||||
-rw-r--r-- | source/blender/blenlib/BLI_utildefines.h | 25 |
2 files changed, 14 insertions, 18 deletions
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 05c1a675f47..50764e10ceb 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -252,7 +252,12 @@ void BKE_blender_userdef_app_template_data_swap(UserDef *userdef_a, UserDef *use */ #define DATA_SWAP(id) \ - SWAP(userdef_a->id, userdef_b->id); + { \ + UserDef userdef_tmp; \ + memcpy(&(userdef_tmp.id), &(userdef_a->id), sizeof(userdef_tmp.id)); \ + memcpy(&(userdef_a->id), &(userdef_b->id), sizeof(userdef_tmp.id)); \ + memcpy(&(userdef_b->id), &(userdef_tmp.id), sizeof(userdef_tmp.id)); \ + } #define LIST_SWAP(id) { \ SWAP(ListBase, userdef_a->id, userdef_b->id); \ diff --git a/source/blender/blenlib/BLI_utildefines.h b/source/blender/blenlib/BLI_utildefines.h index ec6042637aa..8f8d7cc3b7f 100644 --- a/source/blender/blenlib/BLI_utildefines.h +++ b/source/blender/blenlib/BLI_utildefines.h @@ -140,24 +140,15 @@ extern "C" { /* some math and copy defines */ -#define _VA_SWAP3(type, a, b) { \ - CHECK_TYPE(a, type); \ - CHECK_TYPE(b, type); \ - type SWAP = (a); \ - (a) = (b); \ - (b) = SWAP; \ -} (void)0 - -#define _VA_SWAP2(a, b) { \ - CHECK_TYPE_PAIR(a, b); \ - struct { char a_[sizeof(a)]; } SWAP, *a_ = (void *)&(a), *b_ = (void *)&(b); \ - SWAP = *a_; \ - *a_ = *b_; \ - *b_ = SWAP; \ -} ((void)0) -/* SWAP with two or three args (initial type argument is optional) */ -#define SWAP(...) VA_NARGS_CALL_OVERLOAD(_VA_SWAP, __VA_ARGS__) +#define SWAP(type, a, b) { \ + type sw_ap; \ + CHECK_TYPE(a, type); \ + CHECK_TYPE(b, type); \ + sw_ap = (a); \ + (a) = (b); \ + (b) = sw_ap; \ +} (void)0 /* swap with a temp value */ #define SWAP_TVAL(tval, a, b) { \ |