summaryrefslogtreecommitdiff
path: root/pngwtran.c
diff options
context:
space:
mode:
Diffstat (limited to 'pngwtran.c')
-rw-r--r--pngwtran.c40
1 files changed, 18 insertions, 22 deletions
diff --git a/pngwtran.c b/pngwtran.c
index 98703f8c8..d3d47f3fb 100644
--- a/pngwtran.c
+++ b/pngwtran.c
@@ -1,8 +1,8 @@
/* pngwtran.c - transforms the data in a row for PNG writers
*
- * Last changed in libpng 1.6.0 [February 14, 2013]
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
+ * Last changed in libpng 1.6.0 [(PENDING RELEASE)]
+ * Copyright (c) 1998-2012 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
*
@@ -287,7 +287,7 @@ png_do_shift(png_row_infop row_info, png_bytep row,
{
png_bytep bp = row;
png_size_t i;
- unsigned int mask;
+ png_byte mask;
png_size_t row_bytes = row_info->rowbytes;
if (bit_depth->gray == 1 && row_info->bit_depth == 2)
@@ -301,22 +301,20 @@ png_do_shift(png_row_infop row_info, png_bytep row,
for (i = 0; i < row_bytes; i++, bp++)
{
+ png_uint_16 v;
int j;
- unsigned int v, out;
v = *bp;
- out = 0;
+ *bp = 0;
for (j = shift_start[0]; j > -shift_dec[0]; j -= shift_dec[0])
{
if (j > 0)
- out |= v << j;
+ *bp |= (png_byte)((v << j) & 0xff);
else
- out |= (v >> (-j)) & mask;
+ *bp |= (png_byte)((v >> (-j)) & mask);
}
-
- *bp = (png_byte)(out & 0xff);
}
}
@@ -329,23 +327,21 @@ png_do_shift(png_row_infop row_info, png_bytep row,
for (i = 0; i < istop; i++, bp++)
{
- const unsigned int c = i%channels;
+ png_uint_16 v;
int j;
- unsigned int v, out;
+ int c = (int)(i%channels);
v = *bp;
- out = 0;
+ *bp = 0;
for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
{
if (j > 0)
- out |= v << j;
+ *bp |= (png_byte)((v << j) & 0xff);
else
- out |= v >> (-j);
+ *bp |= (png_byte)((v >> (-j)) & 0xff);
}
-
- *bp = (png_byte)(out & 0xff);
}
}
@@ -357,22 +353,22 @@ png_do_shift(png_row_infop row_info, png_bytep row,
for (bp = row, i = 0; i < istop; i++)
{
- const unsigned int c = i%channels;
+ int c = (int)(i%channels);
+ png_uint_16 value, v;
int j;
- unsigned int value, v;
- v = png_get_uint_16(bp);
+ v = (png_uint_16)(((png_uint_16)(*bp) << 8) + *(bp + 1));
value = 0;
for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
{
if (j > 0)
- value |= v << j;
+ value |= (png_uint_16)((v << j) & (png_uint_16)0xffff);
else
- value |= v >> (-j);
+ value |= (png_uint_16)((v >> (-j)) & (png_uint_16)0xffff);
}
- *bp++ = (png_byte)((value >> 8) & 0xff);
+ *bp++ = (png_byte)(value >> 8);
*bp++ = (png_byte)(value & 0xff);
}
}