diff --git a/png.c b/png.c index f84227502..b0671b3e2 100644 --- a/png.c +++ b/png.c @@ -1,7 +1,7 @@ /* png.c - location for general purpose libpng functions * - * libpng version 1.0.6f - April 14, 2000 + * libpng version 1.0.6h - April 24, 2000 * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson @@ -14,14 +14,14 @@ #include "png.h" /* Generate a compiler error if there is an old png.h in the search path. */ -typedef version_1_0_6f Your_png_h_is_not_version_1_0_6f; +typedef version_1_0_6h Your_png_h_is_not_version_1_0_6h; /* Version information for C files. This had better match the version * string defined in png.h. */ #ifdef PNG_USE_GLOBAL_ARRAYS /* png_libpng_ver was changed to a function in version 1.0.5c */ -char png_libpng_ver[12] = "1.0.6f"; +char png_libpng_ver[12] = "1.0.6h"; /* png_sig was changed to a function in version 1.0.5c */ /* Place to hold the signature string for a PNG file. */ @@ -561,7 +561,7 @@ png_charp png_get_copyright(png_structp png_ptr) { if (png_ptr != NULL || png_ptr == NULL) /* silence compiler warning */ - return ("\n libpng version 1.0.6f - April 14, 2000\n\ + return ("\n libpng version 1.0.6h - April 24, 2000\n\ Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.\n\ Copyright (c) 1996, 1997 Andreas Dilger\n\ Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson\n"); @@ -579,8 +579,8 @@ png_get_libpng_ver(png_structp png_ptr) { /* Version of *.c files used when building libpng */ if(png_ptr != NULL) /* silence compiler warning about unused png_ptr */ - return("1.0.6f"); - return("1.0.6f"); + return("1.0.6h"); + return("1.0.6h"); } png_charp @@ -617,3 +617,10 @@ png_handle_as_unknown(png_structp png_ptr, png_bytep chunk_name) return 0; } #endif + +/* This function, added to libpng-1.0.6g, is untested. */ +int +png_reset_zstream(png_structp png_ptr) +{ + return (inflateReset(&png_ptr->zstream)); +} diff --git a/png.h b/png.h index d4b90758c..fd527b60c 100644 --- a/png.h +++ b/png.h @@ -1,7 +1,7 @@ /* png.h - header file for PNG reference library * - * libpng version 1.0.6f - April 14, 2000 + * libpng version 1.0.6h - April 24, 2000 * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson @@ -9,7 +9,7 @@ * Authors and maintainers: * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat * libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger - * libpng versions 0.97, January 1998, through 1.0.6f - April 14, 2000: Glenn + * libpng versions 0.97, January 1998, through 1.0.6h - April 24, 2000: Glenn * See also "Contributing Authors", below. * * Note about libpng version numbers: @@ -44,20 +44,26 @@ * 1.0.4a-f 1.0.4a-f 10005 2.1.0.4a-f * 1.0.5 (+ 2 patches) 1.0.5 10005 2.1.0.5 * 1.0.5a-d 1.0.5a-d 10006 2.1.0.5a-d - * 1.0.5e-r 1.0.5e-r 10100 2.1.0.5e-r (not compatible) - * 1.0.5s-v 1.0.5s-v 10006 2.1.0.5s-v (compatible) - * 1.0.6 (+ 3 patches) 1.0.6 10006 2.1.0.6 - * 1.0.6d-f 1.0.6d-f 10007 2.1.0.6d-f - * 1.0.7 1.0.7 10007 2.1.0.7 (still compatible) + * 1.0.5e-r 1.0.5e-r 10100 2.1.0.5e-r (not source compatible) + * 1.0.5s-v 1.0.5s-v 10006 2.1.0.5s-v (not binary compatible) + * 1.0.6 (+ 3 patches) 1.0.6 10006 2.1.0.6 (still binary incompat) + * 1.0.6d-f 1.0.6d-f 10007 2.1.0.6d-f (still binary incompat) + * 1.0.6g 1.0.6g 10007 2.1.0.6g (compatible with 1.0.5) + * 1.0.6h 1.0.6h 10007 10.6h (compatible with 1.0.5) + * 1.0.7 1.0.7 10007 10.7 (still compatible) * - * Henceforth the source version will match the shared-library minor - * and patch numbers; the shared-library major version number will be + * Henceforth the source version will match the shared-library major + * and minor numbers; the shared-library major version number will be * used for changes in backward compatibility, as it is intended. The * PNG_PNGLIB_VER macro, which is not used within libpng but is available * for applications, is an unsigned integer of the form xyyzz corresponding * to the source version x.y.z (leading zeros in y and z). Beta versions * are given the previous public release number plus a letter or two. * + * Binary incompatibility exists only when applications make direct access + * to the info_ptr or png_ptr members through png.h, and the compiled + * application is loaded with a different version of the library. + * * See libpng.txt or libpng.3 for more information. The PNG specification * is available as RFC 2083 * and as a W3C Recommendation @@ -73,7 +79,7 @@ * Copyright (c) 1996, 1997 Andreas Dilger * (libpng versions 0.89c, June 1996, through 0.96, May 1997) * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson - * (libpng versions 0.97, January 1998, through 1.0.6f, April 14, 2000) + * (libpng versions 0.97, January 1998, through 1.0.6h, April 24, 2000) * * For the purposes of this copyright and license, "Contributing Authors" * is defined as the following set of individuals: @@ -148,13 +154,13 @@ * Y2K compliance in libpng: * ========================= * - * April 14, 2000 + * April 24, 2000 * * Since the PNG Development group is an ad-hoc body, we can't make * an official declaration. * * This is your unofficial assurance that libpng from version 0.71 and - * upward through 1.0.6f are Y2K compliant. It is my belief that earlier + * upward through 1.0.6h are Y2K compliant. It is my belief that earlier * versions were also Y2K compliant. * * Libpng only has three year fields. One is a 2-byte unsigned integer @@ -232,7 +238,7 @@ extern "C" { */ /* Version information for png.h - this should match the version in png.c */ -#define PNG_LIBPNG_VER_STRING "1.0.6f" +#define PNG_LIBPNG_VER_STRING "1.0.6h" /* Careful here. At one time, Guy wanted to use 082, but that would be octal. * We must not include leading zeros. @@ -483,8 +489,6 @@ typedef struct png_info_struct * and initialize the appropriate fields below. */ - png_uint_32 free_me; /* flags items libpng is responsible for freeing */ - #if defined(PNG_gAMA_SUPPORTED) || defined(PNG_READ_GAMMA_SUPPORTED) /* The gAMA chunk describes the gamma characteristics of the system * on which the image was created, normally in the range [1.0, 2.5]. @@ -493,7 +497,6 @@ typedef struct png_info_struct #ifdef PNG_FLOATING_POINT_SUPPORTED float gamma; /* gamma value of image, if (valid & PNG_INFO_gAMA) */ #endif - png_fixed_point int_gamma; /* gamma value of image, if (valid & PNG_INFO_gAMA) */ #endif #if defined(PNG_sRGB_SUPPORTED) @@ -609,16 +612,6 @@ defined(PNG_READ_BACKGROUND_SUPPORTED) float x_blue; float y_blue; #endif -#ifdef PNG_FIXED_POINT_SUPPORTED - png_fixed_point int_x_white; - png_fixed_point int_y_white; - png_fixed_point int_x_red; - png_fixed_point int_y_red; - png_fixed_point int_x_green; - png_fixed_point int_y_green; - png_fixed_point int_x_blue; - png_fixed_point int_y_blue; -#endif #endif #if defined(PNG_pCAL_SUPPORTED) @@ -687,6 +680,24 @@ defined(PNG_READ_BACKGROUND_SUPPORTED) /* Data valid if (valid & PNG_INFO_IDAT) non-zero */ png_bytepp row_pointers; /* the image bits */ #endif + +#if defined(PNG_gAMA_SUPPORTED) || defined(PNG_READ_GAMMA_SUPPORTED) + png_fixed_point int_gamma; /* gamma of image, if (valid & PNG_INFO_gAMA) */ +#endif + +#if defined(PNG_cHRM_SUPPORTED) && defined(PNG_FIXED_POINT_SUPPORTED) + png_fixed_point int_x_white; + png_fixed_point int_y_white; + png_fixed_point int_x_red; + png_fixed_point int_y_red; + png_fixed_point int_x_green; + png_fixed_point int_y_green; + png_fixed_point int_x_blue; + png_fixed_point int_y_blue; +#endif + + png_uint_32 free_me; /* flags items libpng is responsible for freeing */ + } png_info; typedef png_info FAR * png_infop; @@ -881,14 +892,8 @@ struct png_struct_def png_byte user_transform_channels; /* channels in user transformed pixels */ #endif -#if defined(PNG_READ_USER_CHUNKS_SUPPORTED) - png_voidp user_chunk_ptr; - png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */ -#endif - png_uint_32 mode; /* tells us where we are in the PNG file */ png_uint_32 flags; /* flags indicating various things to libpng */ - png_uint_32 free_me; /* flags items libpng is responsible for freeing */ png_uint_32 transformations; /* which transformations to perform */ z_stream zstream; /* pointer to decompression structure (below) */ @@ -962,7 +967,6 @@ struct png_struct_def float gamma; /* file gamma value */ float screen_gamma; /* screen gamma value (display_exponent) */ #endif - png_fixed_point int_gamma; #endif #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) @@ -1070,12 +1074,23 @@ struct png_struct_def int num_chunk_list; png_bytep chunk_list; #endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + png_fixed_point int_gamma; +#endif + +#if defined(PNG_READ_USER_CHUNKS_SUPPORTED) + png_voidp user_chunk_ptr; + png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */ +#endif + + png_uint_32 free_me; /* flags items libpng is responsible for freeing */ }; /* This prevents a compiler error in png_get_copyright() in png.c if png.c -and png.h are both at * version 1.0.6f +and png.h are both at * version 1.0.6h */ -typedef png_structp version_1_0_6f; +typedef png_structp version_1_0_6h; typedef png_struct FAR * FAR * png_structpp; @@ -1114,6 +1129,15 @@ extern PNG_EXPORT(png_structp,png_create_write_struct) PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn)); +extern PNG_EXPORT(png_uint_32,png_get_compression_buffer_size) + PNGARG((png_structp png_ptr)); + +extern PNG_EXPORT(void,png_set_compression_buffer_size) + PNGARG((png_structp png_ptr, png_uint_32 size)); + +/* Reset the compression stream */ +extern PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr)); + #ifdef PNG_USER_MEM_SUPPORTED extern PNG_EXPORT(png_structp,png_create_read_struct_2) PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, @@ -2003,6 +2027,8 @@ extern PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp png_ptr, int keep, png_bytep chunk_list, int num_chunks)); extern PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr, png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns)); +extern PNG_EXPORT(void, png_set_unknown_chunk_location) + PNGARG((png_structp png_ptr, png_infop info_ptr, int chunk, int location)); extern PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp png_ptr, png_infop info_ptr, png_unknown_chunkpp entries)); #endif @@ -2058,7 +2084,7 @@ extern PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp png_ptr) extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr)); #define PNG_HEADER_VERSION_STRING \ - " libpng version 1.0.6f - April 14, 2000 (header)\n" + " libpng version 1.0.6h - April 24, 2000 (header)\n" #ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED /* With these routines we avoid an integer divide, which will be slower on diff --git a/png_ptr.h b/png_ptr.h new file mode 100644 index 000000000..bfd319ae3 --- /dev/null +++ b/png_ptr.h @@ -0,0 +1,221 @@ +struct png_struct_def +{ +#ifdef PNG_SETJMP_SUPPORTED + jmp_buf jmpbuf; /* used in png_error */ +#endif + png_error_ptr error_fn; /* function for printing errors and aborting */ + png_error_ptr warning_fn; /* function for printing warnings */ + png_voidp error_ptr; /* user supplied struct for error functions */ + png_rw_ptr write_data_fn; /* function for writing output data */ + png_rw_ptr read_data_fn; /* function for reading input data */ + png_voidp io_ptr; /* ptr to application struct for I/O functions*/ + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) + png_user_transform_ptr read_user_transform_fn; /* user read transform */ +#endif + +#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) + png_user_transform_ptr write_user_transform_fn; /* user write transform */ +#endif + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) + png_voidp user_transform_ptr; /* user supplied struct for user transform */ + png_byte user_transform_depth; /* bit depth of user transformed pixels */ + png_byte user_transform_channels; /* channels in user transformed pixels */ +#endif + +#if defined(PNG_READ_USER_CHUNKS_SUPPORTED) + png_voidp user_chunk_ptr; + png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */ +#endif + + png_uint_32 mode; /* tells us where we are in the PNG file */ + png_uint_32 flags; /* flags indicating various things to libpng */ + png_uint_32 transformations; /* which transformations to perform */ + + z_stream zstream; /* pointer to decompression structure (below) */ + png_bytep zbuf; /* buffer for zlib */ + png_size_t zbuf_size; /* size of zbuf */ + int zlib_level; /* holds zlib compression level */ + int zlib_method; /* holds zlib compression method */ + int zlib_window_bits; /* holds zlib compression window bits */ + int zlib_mem_level; /* holds zlib compression memory level */ + int zlib_strategy; /* holds zlib compression strategy */ + + png_uint_32 width; /* width of image in pixels */ + png_uint_32 height; /* height of image in pixels */ + png_uint_32 num_rows; /* number of rows in current pass */ + png_uint_32 usr_width; /* width of row at start of write */ + png_uint_32 rowbytes; /* size of row in bytes */ + png_uint_32 irowbytes; /* size of current interlaced row in bytes */ + png_uint_32 iwidth; /* width of current interlaced row in pixels */ + png_uint_32 row_number; /* current row in interlace pass */ + png_bytep prev_row; /* buffer to save previous (unfiltered) row */ + png_bytep row_buf; /* buffer to save current (unfiltered) row */ + png_bytep sub_row; /* buffer to save "sub" row when filtering */ + png_bytep up_row; /* buffer to save "up" row when filtering */ + png_bytep avg_row; /* buffer to save "avg" row when filtering */ + png_bytep paeth_row; /* buffer to save "Paeth" row when filtering */ + png_row_info row_info; /* used for transformation routines */ + + png_uint_32 idat_size; /* current IDAT size for read */ + png_uint_32 crc; /* current chunk CRC value */ + png_colorp palette; /* palette from the input file */ + png_uint_16 num_palette; /* number of color entries in palette */ + png_uint_16 num_trans; /* number of transparency values */ + png_byte chunk_name[5]; /* null-terminated name of current chunk */ + png_byte compression; /* file compression type (always 0) */ + png_byte filter; /* file filter type (always 0) */ + png_byte interlaced; /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */ + png_byte pass; /* current interlace pass (0 - 6) */ + png_byte do_filter; /* row filter flags (see PNG_FILTER_ below ) */ + png_byte color_type; /* color type of file */ + png_byte bit_depth; /* bit depth of file */ + png_byte usr_bit_depth; /* bit depth of users row */ + png_byte pixel_depth; /* number of bits per pixel */ + png_byte channels; /* number of channels in file */ + png_byte usr_channels; /* channels at start of write */ + png_byte sig_bytes; /* magic bytes read/written from start of file */ + +#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) + png_uint_16 filler; /* filler bytes for pixel expansion */ +#endif + +#if defined(PNG_READ_bKGD_SUPPORTED) + png_byte background_gamma_type; +#ifdef PNG_FLOATING_POINT_SUPPORTED + float background_gamma; +#endif + png_color_16 background; /* background color in screen gamma space */ +# if defined(PNG_READ_GAMMA_SUPPORTED) + png_color_16 background_1; /* background normalized to gamma 1.0 */ +# endif /* PNG_READ_GAMMA && PNG_READ_bKGD_SUPPORTED */ +#endif /* PNG_READ_bKGD_SUPPORTED */ + +#if defined(PNG_WRITE_FLUSH_SUPPORTED) + png_flush_ptr output_flush_fn;/* Function for flushing output */ + png_uint_32 flush_dist; /* how many rows apart to flush, 0 - no flush */ + png_uint_32 flush_rows; /* number of rows written since last flush */ +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + int gamma_shift; /* number of "insignificant" bits 16-bit gamma */ +#ifdef PNG_FLOATING_POINT_SUPPORTED + float gamma; /* file gamma value */ + float screen_gamma; /* screen gamma value (display_exponent) */ +#endif +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + png_bytep gamma_table; /* gamma table for 8-bit depth files */ + png_bytep gamma_from_1; /* converts from 1.0 to screen */ + png_bytep gamma_to_1; /* converts from file to 1.0 */ + png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */ + png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */ + png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */ +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined (PNG_READ_sBIT_SUPPORTED) + png_color_8 sig_bit; /* significant bits in each available channel */ +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) + png_color_8 shift; /* shift for significant bit tranformation */ +#endif + +#if defined(PNG_READ_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \ + || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + png_bytep trans; /* transparency values for paletted files */ + png_color_16 trans_values; /* transparency values for non-paletted files */ +#endif + + png_read_status_ptr read_row_fn; /* called after each row is decoded */ + png_write_status_ptr write_row_fn; /* called after each row is encoded */ +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED + png_progressive_info_ptr info_fn; /* called after header data fully read */ + png_progressive_row_ptr row_fn; /* called after each prog. row is decoded */ + png_progressive_end_ptr end_fn; /* called after image is complete */ + png_bytep save_buffer_ptr; /* current location in save_buffer */ + png_bytep save_buffer; /* buffer for previously read data */ + png_bytep current_buffer_ptr; /* current location in current_buffer */ + png_bytep current_buffer; /* buffer for recently used data */ + png_uint_32 push_length; /* size of current input chunk */ + png_uint_32 skip_length; /* bytes to skip in input data */ + png_size_t save_buffer_size; /* amount of data now in save_buffer */ + png_size_t save_buffer_max; /* total size of save_buffer */ + png_size_t buffer_size; /* total amount of available input data */ + png_size_t current_buffer_size; /* amount of data now in current_buffer */ + int process_mode; /* what push library is currently doing */ + int cur_palette; /* current push library palette index */ + +# if defined(PNG_READ_TEXT_SUPPORTED) + png_size_t current_text_size; /* current size of text input data */ + png_size_t current_text_left; /* how much text left to read in input */ + png_charp current_text; /* current text chunk buffer */ + png_charp current_text_ptr; /* current location in current_text */ +# endif /* PNG_PROGRESSIVE_READ_SUPPORTED && PNG_READ_TEXT_SUPPORTED */ + +#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ + +#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__) +/* for the Borland special 64K segment handler */ + png_bytepp offset_table_ptr; + png_bytep offset_table; + png_uint_16 offset_table_number; + png_uint_16 offset_table_count; + png_uint_16 offset_table_count_free; +#endif + +#if defined(PNG_READ_DITHER_SUPPORTED) + png_bytep palette_lookup; /* lookup table for dithering */ + png_bytep dither_index; /* index translation for palette files */ +#endif + +#if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_READ_hIST_SUPPORTED) + png_uint_16p hist; /* histogram */ +#endif + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + png_byte heuristic_method; /* heuristic for row filter selection */ + png_byte num_prev_filters; /* number of weights for previous rows */ + png_bytep prev_filters; /* filter type(s) of previous row(s) */ + png_uint_16p filter_weights; /* weight(s) for previous line(s) */ + png_uint_16p inv_filter_weights; /* 1/weight(s) for previous line(s) */ + png_uint_16p filter_costs; /* relative filter calculation cost */ + png_uint_16p inv_filter_costs; /* 1/relative filter calculation cost */ +#endif + +#if defined(PNG_TIME_RFC1123_SUPPORTED) + png_charp time_buffer; /* String to hold RFC 1123 time text */ +#endif + +#ifdef PNG_USER_MEM_SUPPORTED + png_voidp mem_ptr; /* user supplied struct for mem functions */ + png_malloc_ptr malloc_fn; /* function for allocating memory */ + png_free_ptr free_fn; /* function for freeing memory */ +#endif + +#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) + png_byte rgb_to_gray_status; + png_uint_16 rgb_to_gray_red_coeff; + png_uint_16 rgb_to_gray_green_coeff; + png_uint_16 rgb_to_gray_blue_coeff; +#endif + +#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ + defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) + png_byte empty_plte_permitted; +#endif + +#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) + int num_chunk_list; + png_bytep chunk_list; +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + png_fixed_point int_gamma; +#endif + + png_uint_32 free_me; /* flags items libpng is responsible for freeing */ +}; diff --git a/pngasmrd.h b/pngasmrd.h index e17994b25..db2d5f84e 100644 --- a/pngasmrd.h +++ b/pngasmrd.h @@ -1,6 +1,6 @@ /* pngasmrd.h - assembler version of utilities to read a PNG file * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1999, 2000 Glenn Randers-Pehrson * diff --git a/pngconf.h b/pngconf.h index 33b6bd21c..ea8da8104 100644 --- a/pngconf.h +++ b/pngconf.h @@ -1,7 +1,7 @@ /* pngconf.h - machine configurable file for libpng * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger @@ -17,8 +17,6 @@ #ifndef PNGCONF_H #define PNGCONF_H -#include "pngcrush.h" /* except for this line, this is libpng's pngconf.h */ - /* This is the size of the compression buffer, and thus the size of * an IDAT chunk. Make this whatever size you feel is best for your * machine. One of these will be allocated per png_struct. When this diff --git a/pngcrush.c b/pngcrush.c index a22fe8a83..e514545e1 100644 --- a/pngcrush.c +++ b/pngcrush.c @@ -15,7 +15,7 @@ * occasionally creating Linux executables. */ -#define PNGCRUSH_VERSION "1.4.2" +#define PNGCRUSH_VERSION "1.4.3" /* * COPYRIGHT NOTICE, DISCLAIMER, AND LICENSE: @@ -46,6 +46,18 @@ */ /* Change log: + * + * Version 1.4.3 (built with libpng-1.0.6h and cexcept-0.6.3) + * + * Reduced scope of Try/Catch blocks to avoid nesting them, and + * removed returns from within the Try blocks, where they are not + * allowed. + * + * Removed direct access to the png structure when possible, and isolated + * the remaining direct accesses to the png structure into new + * png_get_compression_buffer_size(), png_set_compression_buffer_size(), + * and png_set_unknown_chunk_location() functions that were installed + * in libpng version 1.0.6g. * * Version 1.4.2 (built with libpng-1.0.6f and cexcept-0.6.0) * @@ -278,6 +290,7 @@ static PNG_CONST char *outname = "pngout.png"; static PNG_CONST char *directory_name = "pngcrush.bak"; static PNG_CONST char *extension = "_C.png"; +static png_uint_32 measured_idat_length; static int all_chunks_are_safe=0; static int number_of_open_files; static int do_pplt = 0; @@ -309,8 +322,8 @@ char *str_return; #include "cexcept.h" define_exception_type(const char *); extern struct exception_context the_exception_context[1]; - struct exception_context the_exception_context[1]; +png_const_charp msg; static png_uint_32 total_input_length = 0; static png_uint_32 total_output_length = 0; @@ -385,7 +398,7 @@ static png_infop end_info_ptr; static png_infop write_end_info_ptr; static FILE *fpin, *fpout; png_uint_32 measure_idats(FILE *fpin); -png_uint_32 png_measure_idat(png_structp png_ptr, png_infop info_ptr); +png_uint_32 png_measure_idat(png_structp png_ptr); # define MAX_METHODS 200 # define MAX_METHODSP1 201 # define DEFAULT_METHODS 10 @@ -394,9 +407,54 @@ static int filter_method, zlib_level; static png_bytep png_row_filters=NULL; static float t_start, t_stop, t_decode, t_encode, t_misc; -static int max_idat_size = PNG_ZBUF_SIZE; +static png_uint_32 max_idat_size = PNG_ZBUF_SIZE; int ia; +/********* Functions to make direct access to the png_ptr. *************** + * + * Making direct access to the png_ptr or info_ptr is frowned upon because + * it incurs a risk of binary incompatibility with otherwise compatible + * versions of libpng, so all such accesses are collected here. These + * functions could be candidates for inclusion in some future version of + * libpng. + */ + +#if (PNG_LIBPNG_VER < 10007) +/* This is binary incompatible with versions earlier than 0.99h because of the + * introduction of png_user_transform stuff ahead of the zbuf_size member + * of png_ptr in libpng version 0.99h. Not needed after libpng-1.0.6g + * because the functions became available in libpng. + */ +static png_uint_32 +png_get_compression_buffer_size(png_structp png_ptr) +{ + return(png_ptr->zbuf_size); +} +static void +png_set_compression_buffer_size(png_structp png_ptr, png_uint_32 size) +{ + if(png_ptr->zbuf) + png_free(png_ptr, png_ptr->zbuf); + { + png_ptr->zbuf_size = (png_size_t)size; + png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, size); + } +} + +#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) +static void +png_set_unknown_chunk_location(png_structp png_ptr, png_infop info_ptr, + int chunk, int location) +{ + if(png_ptr != NULL && info_ptr != NULL && chunk >= 0 && chunk < + info_ptr->unknown_chunks_num) + info_ptr->unknown_chunks[chunk].location = (png_byte)location; +} +#endif +#endif + +/************* end of direct access functions *****************************/ + /* cexcept interface */ static void @@ -404,19 +462,20 @@ png_cexcept_error(png_structp png_ptr, png_const_charp msg) { if(png_ptr) ; -#if (PNG_LIBPNG_VER > 10006) +#if (PNG_LIBPNG_VER > 10006 && defined(PNGCRUSH_H)) if (!strcmp(msg, "Too many IDAT's found")) { #ifndef PNG_NO_CONSOLE_IO - fprintf(stderr, "Correcting "); + fprintf(stderr, "\nIn %s, correcting ",inname); #else png_warning(png_ptr, msg); #endif - /* png_ptr->mode |= PNG_AFTER_IDAT; */ } else #endif - Throw msg; + { + Throw msg; + } } /* START of code to validate memory allocation and deallocation */ @@ -531,21 +590,6 @@ void png_crush_pause(void) /* stifle compiler warning */ return; } } -#define PNG_CRUSH_CLEANUP \ - fprintf(STDERR, "%s -> %s: libpng read error\n", inname, outname); \ - if(row_buf != NULL)png_free(read_ptr, row_buf); \ - row_buf = (png_bytep)NULL; \ - png_destroy_info_struct(write_ptr, &write_end_info_ptr); \ - png_destroy_write_struct(&write_ptr, &write_info_ptr); \ - if(nosave == 0) \ - { \ - FCLOSE(fpout); \ - } \ - png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr); \ - FCLOSE(fpin); \ - if(verbose > 1) \ - fprintf(STDERR, "returning after longjump\n"); - int keep_chunk(png_const_charp name, char *argv[]); int keep_chunk(png_const_charp name, char *argv[]) @@ -926,7 +970,7 @@ main(int argc, char *argv[]) { names++; BUMP_I; - max_idat_size = atoi(argv[i]); + max_idat_size = (png_uint_32)atoi(argv[i]); if (max_idat_size > PNG_ZBUF_SIZE) max_idat_size=PNG_ZBUF_SIZE; } else if(!strncmp(argv[i],"-m",2)) @@ -1604,12 +1648,9 @@ main(int argc, char *argv[]) for (ia=0; ia<255; ia++) trns_array[ia]=255; - for(;;) /* loop on input files */ + for(;;) /* loop on input files */ - { - png_const_charp msg; - Try - { + { first_trial = 1; if(png_row_filters != NULL) @@ -1714,6 +1755,11 @@ main(int argc, char *argv[]) else idat_length[0]=1; + if (input_color_type == 4 || input_color_type == 6) + /* check for unused alpha channel */ + { + } + if(!methods_specified || try_method[0] == 0) { for (i=1; i<=DEFAULT_METHODS; i++) try_method[i]=0; @@ -1865,6 +1911,8 @@ main(int argc, char *argv[]) P2("files are opened.\n"); png_crush_pause(); + Try + { png_debug(0, "Allocating read and write structures\n"); #ifdef PNG_USER_MEM_SUPPORTED read_ptr = png_create_read_struct_2(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, @@ -1921,31 +1969,26 @@ main(int argc, char *argv[]) /* We don't need to check CRC's because they were already checked in the png_measure_idat function */ - read_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_NOWARN | - PNG_FLAG_CRC_ANCILLARY_USE | - PNG_FLAG_CRC_CRITICAL_IGNORE; + png_set_crc_action(read_ptr, PNG_CRC_QUIET_USE, PNG_CRC_QUIET_USE); +#if (PNG_LIBPNG_VER >= 10000) /* reinitialize zbuf - compression buffer */ - if(read_ptr->zbuf_size < (png_size_t)max_idat_size) + if(png_get_compression_buffer_size(read_ptr) < max_idat_size) { - P2("reinitializing read zbuf.\n"); - png_free(read_ptr, read_ptr->zbuf); - read_ptr->zbuf_size = (png_size_t)max_idat_size; - read_ptr->zbuf = - (png_bytep)png_malloc(read_ptr, (png_uint_32)read_ptr->zbuf_size); + P2("reinitializing read zbuf.\n"); + png_set_compression_buffer_size(read_ptr, max_idat_size); } if(nosave == 0) { - if(write_ptr->zbuf_size > (png_size_t)max_idat_size) + if(png_get_compression_buffer_size(write_ptr) < max_idat_size) { P2("reinitializing write zbuf.\n"); - png_free(write_ptr, write_ptr->zbuf); - write_ptr->zbuf_size = (png_size_t)max_idat_size; - write_ptr->zbuf = (png_bytep)png_malloc(write_ptr, - (png_uint_32)write_ptr->zbuf_size); + png_set_compression_buffer_size(write_ptr, max_idat_size); } } +#endif + #if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) png_set_keep_unknown_chunks(read_ptr, HANDLE_CHUNK_ALWAYS, (png_bytep)NULL, 0); @@ -2172,8 +2215,7 @@ main(int argc, char *argv[]) int required_window; int channels=0; - write_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_STRATEGY; - write_ptr->zlib_strategy = z_strategy; + png_set_compression_strategy(write_ptr, z_strategy); if (output_color_type == 0)channels=1; if (output_color_type == 2)channels=3; @@ -2813,12 +2855,12 @@ main(int argc, char *argv[]) &unknowns); if (num_unknowns) { - png_size_t i; + int i; png_set_unknown_chunks(write_ptr, write_info_ptr, unknowns, num_unknowns); - for (i = 0; i < read_info_ptr->unknown_chunks_num; i++) - write_info_ptr->unknown_chunks[i].location = - unknowns[i].location; + for (i = 0; i < num_unknowns; i++) + png_set_unknown_chunk_location(write_ptr, write_info_ptr, + i, (int)unknowns[i].location); } } #endif @@ -2836,7 +2878,10 @@ main(int argc, char *argv[]) if(output_bit_depth < input_bit_depth) { png_color_8 true_bits; +#if 0 + /* why did we need this? */ write_ptr->bit_depth=(png_byte)output_bit_depth; +#endif true_bits.gray = (png_byte)(8 - (input_bit_depth - output_bit_depth)); png_set_shift(read_ptr, &true_bits); png_set_packing(write_ptr); @@ -2876,18 +2921,7 @@ main(int argc, char *argv[]) #endif if (row_buf == NULL) - { - fprintf(STDERR, "Insufficient memory to allocate row buffer\n"); - png_destroy_read_struct(&read_ptr, &read_info_ptr, (png_infopp)NULL); - png_destroy_write_struct(&write_ptr, &write_info_ptr); - if(png_row_filters != NULL) - { - free(png_row_filters); png_row_filters=NULL; - } - FCLOSE(fpin); - FCLOSE(fpout); - return 1; - } + png_error(read_ptr, "Insufficient memory to allocate row buffer"); { /* check for sufficient memory: we need 2*zlib_window @@ -3092,13 +3126,13 @@ main(int argc, char *argv[]) &unknowns); if (num_unknowns && nosave == 0) { - png_size_t i; + int i; printf("setting %d unknown chunks after IDAT\n",num_unknowns); png_set_unknown_chunks(write_ptr, write_end_info_ptr, unknowns, num_unknowns); - for (i = 0; i < read_info_ptr->unknown_chunks_num; i++) - write_end_info_ptr->unknown_chunks[i].location = - unknowns[i].location; + for (i = 0; i < num_unknowns; i++) + png_set_unknown_chunk_location(write_ptr, write_end_info_ptr, + i, (int)unknowns[i].location); } } #endif @@ -3116,9 +3150,29 @@ main(int argc, char *argv[]) png_destroy_info_struct(write_ptr, &write_end_info_ptr); png_destroy_write_struct(&write_ptr, &write_info_ptr); } + } + Catch (msg) + { + if(nosave == 0) + fprintf(stderr, "While converting %s to %s:\n", inname, outname); + else + fprintf(stderr, "While reading %s:\n", inname); + fprintf(stderr, " pngcrush caught libpng error:\n %s\n\n",msg); + if(row_buf != NULL)png_free(read_ptr, row_buf); + row_buf = (png_bytep)NULL; + png_destroy_info_struct(write_ptr, &write_end_info_ptr); + png_destroy_write_struct(&write_ptr, &write_info_ptr); + if(nosave == 0) + FCLOSE(fpout); + png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr); + FCLOSE(fpin); + if(verbose > 1) + fprintf(stderr, "returning after cleanup\n"); + trial = MAX_METHODS+1; + } + read_ptr=NULL; write_ptr=NULL; - FCLOSE(fpin); if(nosave == 0) FCLOSE(fpout); @@ -3204,72 +3258,61 @@ main(int argc, char *argv[]) if(verbose > 0) show_result(); return 0; } - } - Catch (msg) - { - fprintf(stderr, "Caught libpng error:\n %s\n\n",msg); - PNG_CRUSH_CLEANUP - } - } /* end of loop on input files */ + } /* end of loop on input files */ } png_uint_32 measure_idats(FILE *fpin) { - png_uint_32 measured_idat_length; png_const_charp msg; P2("measure_idats:\n"); png_debug(0, "Allocating read structure\n"); + Try + { read_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, (png_error_ptr)png_cexcept_error, (png_error_ptr)NULL); png_debug(0, "Allocating read_info, end_info structures\n"); read_info_ptr = png_create_info_struct(read_ptr); end_info_ptr = png_create_info_struct(read_ptr); - Try - { - #if !defined(PNG_NO_STDIO) png_init_io(read_ptr, fpin); #else png_set_read_fn(read_ptr, (png_voidp)fpin, png_default_read_data); #endif - - read_ptr->sig_bytes=0; - measured_idat_length=png_measure_idat(read_ptr, read_info_ptr); + png_set_sig_bytes(read_ptr, 0); + measured_idat_length=png_measure_idat(read_ptr); P2("measure_idats: IDAT length=%lu\n",measured_idat_length); png_debug(0, "Destroying data structs\n"); png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr); - return measured_idat_length; } Catch (msg) { - PNG_CRUSH_CLEANUP - P2("Measure_idats caught libpng error:\n %s\n\n",msg); + fprintf(STDERR, "\nWhile reading %s ", inname); + fprintf(STDERR,"pngcrush caught libpng error:\n %s\n\n",msg); + png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr); + png_debug(0, "Destroyed data structs\n"); + measured_idat_length=0; } - return 0; + return measured_idat_length; } png_uint_32 -png_measure_idat(png_structp png_ptr, png_infop info_ptr) +png_measure_idat(png_structp png_ptr) { png_uint_32 sum_idat_length=0; png_debug(1, "in png_read_info\n"); - /* If we haven't checked all of the PNG signature bytes, do so now. */ - if (png_ptr->sig_bytes < 8) { - png_size_t num_checked = png_ptr->sig_bytes, - num_to_check = 8 - num_checked; + png_byte png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10}; - png_read_data(png_ptr, &(info_ptr->signature[num_checked]), num_to_check); - png_ptr->sig_bytes = 8; + png_read_data(png_ptr, png_sig, 8); + png_set_sig_bytes(png_ptr, 8); - if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check)) + if (png_sig_cmp(png_sig, 0, 8)) { - if (num_checked < 4 && - png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4)) + if (png_sig_cmp(png_sig, 0, 4)) png_error(png_ptr, "Not a PNG file"); else png_error(png_ptr, "PNG file corrupted by ASCII conversion"); @@ -3282,10 +3325,12 @@ png_measure_idat(png_structp png_ptr, png_infop info_ptr) #ifdef PNG_USE_LOCAL_ARRAYS PNG_IDAT; PNG_IEND; + PNG_IHDR; #endif #endif png_byte chunk_name[5]; png_byte chunk_length[4]; + png_byte buffer[16]; png_uint_32 length; png_read_data(png_ptr, chunk_length, 4); @@ -3294,6 +3339,17 @@ png_measure_idat(png_structp png_ptr, png_infop info_ptr) png_reset_crc(png_ptr); png_crc_read(png_ptr, chunk_name, 4); +#ifdef PNG_UINT_IDAT + if (png_get_uint_32(chunk_name) == PNG_UINT_IHDR) +#else + if (!png_memcmp(chunk_name, png_IHDR, 4)) +#endif + { + /* get the color type */ + png_crc_read(png_ptr, buffer, 13); + length-=13; + input_color_type=buffer[9]; + } #ifdef PNG_UINT_IDAT if (png_get_uint_32(chunk_name) == PNG_UINT_IDAT) diff --git a/pngerror.c b/pngerror.c index fd606c0a7..63853a178 100644 --- a/pngerror.c +++ b/pngerror.c @@ -1,7 +1,7 @@ /* pngerror.c - stub functions for i/o and memory allocation * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger diff --git a/pnggccrd.c b/pnggccrd.c index a85ffcd5d..76cec6b4e 100644 --- a/pnggccrd.c +++ b/pnggccrd.c @@ -6,7 +6,7 @@ * and http://www.intel.com/drg/pentiumII/appnotes/923/923.htm * for Intel's performance analysis of the MMX vs. non-MMX code. * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998, Intel Corporation * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson @@ -137,6 +137,12 @@ int mmxsupport(void); static int mmx_supported = 2; +#ifdef PNG_USE_LOCAL_ARRAYS +static const int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0}; +static const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; +static const int png_pass_width[7] = {8, 4, 4, 2, 2, 1, 1}; +#endif + // djgpp adds its own underscores to global variables, so define them without: #ifdef __DJGPP__ # define _unmask unmask @@ -4494,7 +4500,7 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep break; default: - png_error(png_ptr, "Bad adaptive filter type"); + png_error(png_ptr, "#103 Bad adaptive filter type"); break; } } diff --git a/pngget.c b/pngget.c index c250e5ec0..2dc5b44a1 100644 --- a/pngget.c +++ b/pngget.c @@ -1,7 +1,7 @@ /* pngget.c - retrieval of values from info struct * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger @@ -801,3 +801,9 @@ png_get_user_chunk_ptr(png_structp png_ptr) } #endif + +png_uint_32 +png_get_compression_buffer_size(png_structp png_ptr) +{ + return(png_ptr->zbuf_size); +} diff --git a/pngmem.c b/pngmem.c index 0cfc89fd5..12a4fd8d5 100644 --- a/pngmem.c +++ b/pngmem.c @@ -1,7 +1,7 @@ /* pngmem.c - stub functions for memory allocation * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger diff --git a/pngpread.c b/pngpread.c index 18ea85b81..a8eee72c8 100644 --- a/pngpread.c +++ b/pngpread.c @@ -1,7 +1,7 @@ /* pngpread.c - read a png file in push mode * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger diff --git a/pngread.c b/pngread.c index 0b2df736c..dac3d983b 100644 --- a/pngread.c +++ b/pngread.c @@ -1,7 +1,7 @@ /* pngread.c - read a PNG file * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger @@ -641,7 +641,7 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row) * not called png_set_interlace_handling(), the display_row buffer will * be ignored, so pass NULL to it. * - * [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.6f. + * [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.6h. */ void @@ -690,7 +690,7 @@ png_read_rows(png_structp png_ptr, png_bytepp row, * only call this function once. If you desire to have an image for * each pass of a interlaced image, use png_read_rows() instead. * - * [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.6f. + * [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.6h. */ void png_read_image(png_structp png_ptr, png_bytepp image) diff --git a/pngrio.c b/pngrio.c index ce9ade3d7..cec81b786 100644 --- a/pngrio.c +++ b/pngrio.c @@ -1,7 +1,7 @@ /* pngrio.c - functions for data input * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger diff --git a/pngrtran.c b/pngrtran.c index f442ef7fa..bd60d1d32 100644 --- a/pngrtran.c +++ b/pngrtran.c @@ -1,7 +1,7 @@ /* pngrtran.c - transforms the data in a row for PNG readers * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger diff --git a/pngrutil.c b/pngrutil.c index fc89edeae..8e5cf7f64 100644 --- a/pngrutil.c +++ b/pngrutil.c @@ -1,7 +1,7 @@ /* pngrutil.c - utilities to read a PNG file * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger diff --git a/pngset.c b/pngset.c index c4442a89e..2817b1f5f 100644 --- a/pngset.c +++ b/pngset.c @@ -1,7 +1,7 @@ /* pngset.c - storage of image information into info struct * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger @@ -693,6 +693,14 @@ png_set_unknown_chunks(png_structp png_ptr, info_ptr->unknown_chunks_num += num_unknowns; info_ptr->free_me |= PNG_FREE_UNKN; } +void +png_set_unknown_chunk_location(png_structp png_ptr, png_infop info_ptr, + int chunk, int location) +{ + if(png_ptr != NULL && info_ptr != NULL && chunk >= 0 && chunk < + (int)info_ptr->unknown_chunks_num) + info_ptr->unknown_chunks[chunk].location = (png_byte)location; +} #endif #if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ @@ -772,3 +780,14 @@ png_set_rows(png_structp png_ptr, png_infop info_ptr, png_bytepp row_pointers) } #endif + +void +png_set_compression_buffer_size(png_structp png_ptr, png_uint_32 size) +{ + if(png_ptr->zbuf) + png_free(png_ptr, png_ptr->zbuf); + png_ptr->zbuf_size = (png_size_t)size; + png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, size); + png_ptr->zstream.next_out = png_ptr->zbuf; + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; +} diff --git a/pngtrans.c b/pngtrans.c index 6d3fd60c3..95e1d05df 100644 --- a/pngtrans.c +++ b/pngtrans.c @@ -1,7 +1,7 @@ /* pngtrans.c - transforms the data in a row (used by both readers and writers) * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger diff --git a/pngvcrd.c b/pngvcrd.c index a0f1f423f..be72d58de 100644 --- a/pngvcrd.c +++ b/pngvcrd.c @@ -2,7 +2,7 @@ * * For Intel x86 CPU and Microsoft Visual C++ compiler * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998, Intel Corporation * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson diff --git a/pngwio.c b/pngwio.c index 2701b79d0..2edc7610d 100644 --- a/pngwio.c +++ b/pngwio.c @@ -1,7 +1,7 @@ /* pngwio.c - functions for data output * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger diff --git a/pngwrite.c b/pngwrite.c index 266ff2f2d..c787c5029 100644 --- a/pngwrite.c +++ b/pngwrite.c @@ -1,7 +1,7 @@ /* pngwrite.c - general routines to write a PNG file * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger diff --git a/pngwtran.c b/pngwtran.c index 2669eaa08..1ff20906a 100644 --- a/pngwtran.c +++ b/pngwtran.c @@ -1,7 +1,7 @@ /* pngwtran.c - transforms the data in a row for PNG writers * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger diff --git a/pngwutil.c b/pngwutil.c index 4dd5ec316..029e9e827 100644 --- a/pngwutil.c +++ b/pngwutil.c @@ -1,7 +1,7 @@ /* pngwutil.c - utilities to write a PNG file * - * libpng 1.0.6f - April 14, 2000 + * libpng 1.0.6h - April 24, 2000 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. * Copyright (c) 1996, 1997 Andreas Dilger