[Bf-blender-cvs] [3166086c600] blender2.8: Static Override: fix 'search matching override operation' function.
Bastien Montagne
noreply at git.blender.org
Tue May 1 15:23:18 CEST 2018
Commit: 3166086c6000495e42a6aa01c25e1a66c52185bd
Author: Bastien Montagne
Date: Tue May 1 15:08:38 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB3166086c6000495e42a6aa01c25e1a66c52185bd
Static Override: fix 'search matching override operation' function.
Previous code was waaaayyyy to flacky, returning matches for things that
did not actually have much in common!
===================================================================
M source/blender/blenkernel/intern/library_override.c
===================================================================
diff --git a/source/blender/blenkernel/intern/library_override.c b/source/blender/blenkernel/intern/library_override.c
index 625af190bbc..8917fac198c 100644
--- a/source/blender/blenkernel/intern/library_override.c
+++ b/source/blender/blenkernel/intern/library_override.c
@@ -28,6 +28,7 @@
*/
#include <stdlib.h>
+#include <string.h>
#include "MEM_guardedalloc.h"
@@ -303,30 +304,46 @@ IDOverrideStaticPropertyOperation *BKE_override_static_property_operation_find(
*r_strict = true;
}
- if (subitem_locname &&
- (opop = BLI_findstring_ptr(&override_property->operations, subitem_locname,
- offsetof(IDOverrideStaticPropertyOperation, subitem_local_name))))
- {
- return opop;
+ if (subitem_locname != NULL) {
+ opop = BLI_findstring_ptr(&override_property->operations, subitem_locname,
+ offsetof(IDOverrideStaticPropertyOperation, subitem_local_name));
+
+ if (opop == NULL) {
+ return NULL;
+ }
+
+ if (subitem_refname == NULL || opop->subitem_reference_name == NULL) {
+ return subitem_refname == opop->subitem_reference_name ? opop : NULL;
+ }
+ return (subitem_refname != NULL && opop->subitem_reference_name != NULL &&
+ STREQ(subitem_refname, opop->subitem_reference_name)) ? opop : NULL;
}
- if (subitem_refname &&
- (opop = BLI_findstring_ptr(&override_property->operations, subitem_refname,
- offsetof(IDOverrideStaticPropertyOperation, subitem_reference_name))))
- {
- return opop;
+ if (subitem_refname != NULL) {
+ opop = BLI_findstring_ptr(&override_property->operations, subitem_refname,
+ offsetof(IDOverrideStaticPropertyOperation, subitem_reference_name));
+
+ if (opop == NULL) {
+ return NULL;
+ }
+
+ if (subitem_locname == NULL || opop->subitem_local_name == NULL) {
+ return subitem_locname == opop->subitem_local_name ? opop : NULL;
+ }
+ return (subitem_locname != NULL && opop->subitem_local_name != NULL &&
+ STREQ(subitem_locname, opop->subitem_local_name)) ? opop : NULL;
}
if ((opop = BLI_listbase_bytes_find(&override_property->operations, &subitem_locindex, sizeof(subitem_locindex),
offsetof(IDOverrideStaticPropertyOperation, subitem_local_index))))
{
- return opop;
+ return ELEM(subitem_refindex, -1, opop->subitem_reference_index) ? opop : NULL;
}
if ((opop = BLI_listbase_bytes_find(&override_property->operations, &subitem_refindex, sizeof(subitem_refindex),
offsetof(IDOverrideStaticPropertyOperation, subitem_reference_index))))
{
- return opop;
+ return ELEM(subitem_locindex, -1, opop->subitem_local_index) ? opop : NULL;
}
/* index == -1 means all indices, that is valid fallback in case we requested specific index. */
More information about the Bf-blender-cvs
mailing list