ecore: correctly apply the offset on the upper part of the boolean mask for Efl.Boole...
authorCedric BAIL <cedric.bail@free.fr>
Fri, 8 Nov 2019 20:12:30 +0000 (12:12 -0800)
committerJongmin Lee <jm105.lee@samsung.com>
Wed, 13 Nov 2019 21:13:17 +0000 (06:13 +0900)
The upper mask is the one that should actually move as the gap is between the lower and
the upper mask when removing an element from the array.

Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de>
Differential Revision: https://phab.enlightenment.org/D10632

src/lib/ecore/efl_boolean_model.c

index 5ac0dca..552baf1 100644 (file)
@@ -282,8 +282,8 @@ _child_removed(void *data, const Efl_Event *event)
              // Manually shift all the byte in the buffer
              while (offset < byte_length)
                {
-                  lookup->buffer[offset] = (lookup->buffer[offset] & upper_mask) |
-                    ((lookup->buffer[offset] & lower_mask) << 1);
+                  lookup->buffer[offset] = ((lookup->buffer[offset] & upper_mask) >> 1) |
+                    (lookup->buffer[offset] & lower_mask);
                   if (offset + 1 < byte_length)
                     lookup->buffer[offset] |= lookup->buffer[offset + 1] & 0x1;