randr: Compare all the bytes in RRPostPendingProperties
authorAaron Plattner <aplattner@nvidia.com>
Fri, 29 Jul 2011 23:12:06 +0000 (16:12 -0700)
committerKeith Packard <keithp@keithp.com>
Fri, 29 Jul 2011 23:41:53 +0000 (16:41 -0700)
RRPostPendingProperties tries to compare the pending and current
property values to decide whether they're actually changing.  However,
it does this using a memcmp that passes in pending_value->size as the
number of bytes.  This is actually the number of elements, where each
element is (pending_value->format / 8) bytes long.  This causes the
pending value to not be propagated if the first pending_value->size
bytes are the same and only the end of it is changing.

Fix this by computing the total number of bytes to compare in the
memcmp.

Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
randr/rrproperty.c

index ba04c16..61e7bb4 100644 (file)
@@ -283,7 +283,7 @@ RRPostPendingProperties (RROutputPtr output)
            pending_value->format == current_value->format &&
            pending_value->size == current_value->size &&
            !memcmp (pending_value->data, current_value->data,
-                    pending_value->size))
+                    pending_value->size * (pending_value->format / 8)))
            continue;
 
        if (RRChangeOutputProperty (output, property->propertyName,