diff --git a/ANNOUNCE b/ANNOUNCE index 0421428a9..b343150f3 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,5 +1,5 @@ -Libpng 1.6.0beta16 - March 3, 2012 +Libpng 1.6.0beta16 - March 4, 2012 This is not intended to be a public release. It will be replaced within a few weeks by a public version or by another test version. @@ -258,9 +258,16 @@ Version 1.6.0beta15 [March 2, 2012] without the necessary color data. Removed whitespace from the end of lines in all source files and scripts. -Version 1.6.0beta16 [March 3, 2012] +Version 1.6.0beta16 [March 4, 2012] Relocated palette-index checking function from pngrutil.c to pngtrans.c Added palette-index checking while writing. + Fixed build warnings (MSVC, GCC, GCC v3). Cygwin GCC with default options + declares 'index' as a global, causing a warning if it is used as a local + variable. GCC 64-bit warns about assigning a (size_t) (unsigned 64-bit) + to an (int) (signed 32-bit). MSVC, however, warns about using the + unary '-' operator on an unsigned value (even though it is well defined + by ANSI-C to be ~x+1). The padding calculation was changed to use a + different method. Removed the tests on png_ptr->pass. Send comments/corrections/commendations to png-mng-implement at lists.sf.net (subscription required; visit diff --git a/CHANGES b/CHANGES index 275384344..d50820cdd 100644 --- a/CHANGES +++ b/CHANGES @@ -4009,9 +4009,16 @@ Version 1.6.0beta15 [March 2, 2012] without the necessary color data. Removed whitespace from the end of lines in all source files and scripts. -Version 1.6.0beta16 [March 3, 2012] +Version 1.6.0beta16 [March 4, 2012] Relocated palette-index checking function from pngrutil.c to pngtrans.c Added palette-index checking while writing. + Fixed build warnings (MSVC, GCC, GCC v3). Cygwin GCC with default options + declares 'index' as a global, causing a warning if it is used as a local + variable. GCC 64-bit warns about assigning a (size_t) (unsigned 64-bit) + to an (int) (signed 32-bit). MSVC, however, warns about using the + unary '-' operator on an unsigned value (even though it is well defined + by ANSI-C to be ~x+1). The padding calculation was changed to use a + different method. Removed the tests on png_ptr->pass. Send comments/corrections/commendations to png-mng-implement at lists.sf.net (subscription required; visit diff --git a/pngtrans.c b/pngtrans.c index 703a655a4..838be9f1d 100644 --- a/pngtrans.c +++ b/pngtrans.c @@ -625,11 +625,16 @@ png_do_bgr(png_row_infop row_info, png_bytep row) void /* PRIVATE */ png_do_check_palette_indexes(png_structrp png_ptr, png_row_infop row_info) { - if (png_ptr->num_palette < (1 << row_info->bit_depth) && - png_ptr->num_palette_max >= 0 && - ((png_ptr->interlaced && png_ptr->pass == 6) || - (!png_ptr->interlaced && png_ptr->pass == 0))) + if (png_ptr->num_palette < (1 << row_info->bit_depth) && + png_ptr->num_palette_max >= 0) { + /* Calculations moved outside switch in an attempt to stop different + * compiler warnings. 'padding' is in *bits* within the last byte, it is + * an 'int' because pixel_depth becomes an 'int' in the expression below, + * and this calculation is used because it avoids warnings that other + * forms produced on either GCC or MSVC. + */ + int padding = (-row_info->pixel_depth * row_info->width) & 7; png_bytep rp = png_ptr->row_buf + 1 + row_info->rowbytes; switch (row_info->bit_depth) @@ -639,8 +644,6 @@ png_do_check_palette_indexes(png_structrp png_ptr, png_row_infop row_info) /* in this case, all bytes must be 0 so we don't need * to unpack the pixels except for the rightmost one. */ - int padding = 8*row_info->rowbytes - png_ptr->width; - for (; rp > png_ptr->row_buf; rp--) { if (*rp >> padding != 0) @@ -653,29 +656,27 @@ png_do_check_palette_indexes(png_structrp png_ptr, png_row_infop row_info) case 2: { - int padding = 2*(4*row_info->rowbytes - png_ptr->width); - for (; rp > png_ptr->row_buf; rp--) { - int index = ((*rp >> padding) & 0x03); + int i = ((*rp >> padding) & 0x03); - if (index > png_ptr->num_palette_max) - png_ptr->num_palette_max = index; + if (i > png_ptr->num_palette_max) + png_ptr->num_palette_max = i; - index = (((*rp >> padding) >> 2) & 0x03); + i = (((*rp >> padding) >> 2) & 0x03); - if (index > png_ptr->num_palette_max) - png_ptr->num_palette_max = index; + if (i > png_ptr->num_palette_max) + png_ptr->num_palette_max = i; - index = (((*rp >> padding) >> 4) & 0x03); + i = (((*rp >> padding) >> 4) & 0x03); - if (index > png_ptr->num_palette_max) - png_ptr->num_palette_max = index; + if (i > png_ptr->num_palette_max) + png_ptr->num_palette_max = i; - index = (((*rp >> padding) >> 6) & 0x03); + i = (((*rp >> padding) >> 6) & 0x03); - if (index > png_ptr->num_palette_max) - png_ptr->num_palette_max = index; + if (i > png_ptr->num_palette_max) + png_ptr->num_palette_max = i; padding = 0; } @@ -685,19 +686,17 @@ png_do_check_palette_indexes(png_structrp png_ptr, png_row_infop row_info) case 4: { - int padding = 4*(2*row_info->rowbytes - png_ptr->width); - for (; rp > png_ptr->row_buf; rp--) { - int index = ((*rp >> padding) & 0x0f); + int i = ((*rp >> padding) & 0x0f); - if (index > png_ptr->num_palette_max) - png_ptr->num_palette_max = index; + if (i > png_ptr->num_palette_max) + png_ptr->num_palette_max = i; - index = (((*rp >> padding) >> 4) & 0x0f); + i = (((*rp >> padding) >> 4) & 0x0f); - if (index > png_ptr->num_palette_max) - png_ptr->num_palette_max = index; + if (i > png_ptr->num_palette_max) + png_ptr->num_palette_max = i; padding = 0; } @@ -715,6 +714,9 @@ png_do_check_palette_indexes(png_structrp png_ptr, png_row_infop row_info) break; } + + default: + break; } } }