summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <ssp@redhat.com>2013-09-26 18:56:07 -0400
committerSiarhei Siamashka <siarhei.siamashka@gmail.com>2013-09-28 05:07:12 +0300
commit5323b7ca1ddf3a1806f268b596aeaa2eb1b5f16b (patch)
tree3f05213c9c349f04e167eb7a40fe23e09b414b82
parentff682089ce1128079c06827a80647fa3284ca2a2 (diff)
utils.c: Make image_endian_swap() deal with negative strides
Use a temporary variable s containing the absolute value of the stride as the upper bound in the inner loops. V2: Do this for the bpp == 16 case as well
-rw-r--r--test/utils.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/test/utils.c b/test/utils.c
index a83fc06..0cd982e 100644
--- a/test/utils.c
+++ b/test/utils.c
@@ -297,11 +297,12 @@ image_endian_swap (pixman_image_t *img)
for (i = 0; i < height; i++)
{
uint8_t *line_data = (uint8_t *)data + stride * i;
-
+ int s = (stride >= 0)? stride : - stride;
+
switch (bpp)
{
case 1:
- for (j = 0; j < stride; j++)
+ for (j = 0; j < s; j++)
{
line_data[j] =
((line_data[j] & 0x80) >> 7) |
@@ -315,13 +316,13 @@ image_endian_swap (pixman_image_t *img)
}
break;
case 4:
- for (j = 0; j < stride; j++)
+ for (j = 0; j < s; j++)
{
line_data[j] = (line_data[j] >> 4) | (line_data[j] << 4);
}
break;
case 16:
- for (j = 0; j + 2 <= stride; j += 2)
+ for (j = 0; j + 2 <= s; j += 2)
{
char t1 = line_data[j + 0];
char t2 = line_data[j + 1];
@@ -331,7 +332,7 @@ image_endian_swap (pixman_image_t *img)
}
break;
case 24:
- for (j = 0; j + 3 <= stride; j += 3)
+ for (j = 0; j + 3 <= s; j += 3)
{
char t1 = line_data[j + 0];
char t2 = line_data[j + 1];
@@ -343,7 +344,7 @@ image_endian_swap (pixman_image_t *img)
}
break;
case 32:
- for (j = 0; j + 4 <= stride; j += 4)
+ for (j = 0; j + 4 <= s; j += 4)
{
char t1 = line_data[j + 0];
char t2 = line_data[j + 1];