[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