From 442197c907e3f7a4893a62949a638574316a245f Mon Sep 17 00:00:00 2001 From: Daniel Richard G Date: Wed, 13 Nov 2013 00:33:23 -0500 Subject: [PATCH] Updated the bundled LibPNG/zlib, and polished the MSVC makefile further The bundled copies of LibPNG and zlib have been updated to the versions shipped with FLTK (as these were convenient to build), and I've put in new static libraries compiled with Visual Studio 2003 .NET. These libraries link cleanly even with Visual Studio 2013 Express, so they should work for just about every version of MSVC out there that can compile SolveSpace. The MSVC makefile is also now a little nicer, and the SpaceWare Input library header #includes have been adjusted to drop the si/ prefix (for consistency with how LibPNG/zlib are handled). --- Makefile.msvc | 32 +- extlib/libpng/libpng.lib | Bin 316462 -> 361748 bytes extlib/libpng/png.h | 3941 ++++++++++++++---------------------- extlib/libpng/pngconf.h | 1753 ++++------------ extlib/libpng/pnglibconf.h | 186 ++ extlib/zlib/zconf.h | 212 +- extlib/zlib/zlib.h | 1152 +++++++---- extlib/zlib/zlib.lib | Bin 100642 -> 117868 bytes win32/w32main.cpp | 4 +- 9 files changed, 3026 insertions(+), 4254 deletions(-) create mode 100644 extlib/libpng/pnglibconf.h diff --git a/Makefile.msvc b/Makefile.msvc index 128c851..e5d7d45 100644 --- a/Makefile.msvc +++ b/Makefile.msvc @@ -1,12 +1,26 @@ +# This is an NMAKE-compatible makefile. # SolveSpace may be built using Microsoft Visual Studio 2003 or newer. # (MSVC++ 6.0 is not supported.) +# Comment out this line to compile without the SpaceWare input library. +# HAVE_SPACEWARE_INPUT = 1 -DEFINES = /D_WIN32_WINNT=0x500 /DISOLATION_AWARE_ENABLED /D_WIN32_IE=0x500 /DWIN32_LEAN_AND_MEAN /DWIN32 /DPACKAGE_VERSION="\"2.1\"" -# Use the multi-threaded static libc because libpng and zlib do; not sure if anything bad -# happens if those mix, but don't want to risk it. -CXXFLAGS = /W3 /nologo /MT /D_DEBUG /D_CRT_SECURE_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS /I. /Iextlib /Iextlib\libpng /Iextlib\zlib /Zi /EHs # /O2 +DEFINES = \ + /D_CRT_SECURE_NO_DEPRECATE \ + /D_CRT_SECURE_NO_WARNINGS \ + /D_DEBUG \ + /D_WIN32_WINNT=0x500 \ + /D_WIN32_IE=_WIN32_WINNT \ + /DISOLATION_AWARE_ENABLED \ + /DWIN32 \ + /DWIN32_LEAN_AND_MEAN \ + /DPACKAGE_VERSION="\"2.1\"" + +# We build with /MT for compatibility with the SpaceWare library, and to +# avoid a needless dependency on a C runtime DLL. +# +CXXFLAGS = /nologo /W3 /MT /I. /Iextlib\libpng /Iextlib\si /Iextlib\zlib /Zi /EHs # /O2 HEADERS = win32\freeze.h ui.h solvespace.h dsc.h sketch.h expr.h polygon.h srf\surface.h @@ -16,8 +30,7 @@ W32OBJS = $(OBJDIR)\freeze.obj \ $(OBJDIR)\w32main.obj \ $(OBJDIR)\w32util.obj -SSOBJS = \ - $(OBJDIR)\bsp.obj \ +SSOBJS = $(OBJDIR)\bsp.obj \ $(OBJDIR)\clipboard.obj \ $(OBJDIR)\confscreen.obj \ $(OBJDIR)\constraint.obj \ @@ -67,7 +80,9 @@ RES = $(OBJDIR)\resource.res LIBS = user32.lib gdi32.lib comctl32.lib advapi32.lib shell32.lib opengl32.lib glu32.lib \ extlib\libpng\libpng.lib extlib\zlib\zlib.lib -PERL = perl +# Note that the Perl scripts require the GD module. +# +#PERL = perl !IFDEF HAVE_SPACEWARE_INPUT DEFINES = $(DEFINES) -DHAVE_SPACEWARE_INPUT @@ -103,6 +118,8 @@ $(OBJDIR)\textwin.obj: icons.h $(OBJDIR)\toolbar.obj: icons.h +!IFDEF PERL + icons.h: icons\*.png png2c.pl $(PERL) png2c.pl $@ icons-proto.h @@ -110,3 +127,4 @@ bitmapextra.table.h: icons\*.png pngchar2c.pl $(PERL) pngchar2c.pl >tmp.$@ move /y tmp.$@ $@ +!ENDIF # PERL diff --git a/extlib/libpng/libpng.lib b/extlib/libpng/libpng.lib index c1827917fd2059de79ea78ccc9d937b806ec2b02..8f9c565a1ff92900c3462b5203ddaba5e6c320d0 100644 GIT binary patch literal 361748 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 z

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%0Dpi4g->u5xMf}&^vxU6{T^$e7+ly&sXL9 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 diff --git a/extlib/libpng/png.h b/extlib/libpng/png.h index 2e194b7..4e0dee1 100644 --- a/extlib/libpng/png.h +++ b/extlib/libpng/png.h @@ -1,23 +1,26 @@ + /* png.h - header file for PNG reference library * - * libpng version 1.2.29 - May 8, 2008 - * Copyright (c) 1998-2008 Glenn Randers-Pehrson + * libpng version 1.5.10 - March 29, 2012 + * 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.) * + * This code is released under the libpng license (See LICENSE, below) + * * 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.2.29 - May 8, 2008: Glenn - * See also "Contributing Authors", below. + * 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.5.10 - March 29, 2012: Glenn + * See also "Contributing Authors", below. * * Note about libpng version numbers: * - * Due to various miscommunications, unforeseen code incompatibilities - * and occasional factors outside the authors' control, version numbering - * on the library has not always been consistent and straightforward. - * The following table summarizes matters since version 0.89c, which was - * the first widely used release: + * Due to various miscommunications, unforeseen code incompatibilities + * and occasional factors outside the authors' control, version numbering + * on the library has not always been consistent and straightforward. + * The following table summarizes matters since version 0.89c, which was + * the first widely used release: * * source png.h png.h shared-lib * version string int version @@ -102,117 +105,96 @@ * 1.0.16 10 10016 10.so.0.1.0.16 * 1.2.6 13 10206 12.so.0.1.2.6 * 1.2.7beta1-2 13 10207 12.so.0.1.2.7beta1-2 - * 1.0.17rc1 10 10017 10.so.0.1.0.17rc1 + * 1.0.17rc1 10 10017 12.so.0.1.0.17rc1 * 1.2.7rc1 13 10207 12.so.0.1.2.7rc1 - * 1.0.17 10 10017 10.so.0.1.0.17 + * 1.0.17 10 10017 12.so.0.1.0.17 * 1.2.7 13 10207 12.so.0.1.2.7 * 1.2.8beta1-5 13 10208 12.so.0.1.2.8beta1-5 - * 1.0.18rc1-5 10 10018 10.so.0.1.0.18rc1-5 + * 1.0.18rc1-5 10 10018 12.so.0.1.0.18rc1-5 * 1.2.8rc1-5 13 10208 12.so.0.1.2.8rc1-5 - * 1.0.18 10 10018 10.so.0.1.0.18 + * 1.0.18 10 10018 12.so.0.1.0.18 * 1.2.8 13 10208 12.so.0.1.2.8 * 1.2.9beta1-3 13 10209 12.so.0.1.2.9beta1-3 * 1.2.9beta4-11 13 10209 12.so.0.9[.0] * 1.2.9rc1 13 10209 12.so.0.9[.0] * 1.2.9 13 10209 12.so.0.9[.0] - * 1.2.10beta1-8 13 10210 12.so.0.10[.0] - * 1.2.10rc1-3 13 10210 12.so.0.10[.0] + * 1.2.10beta1-7 13 10210 12.so.0.10[.0] + * 1.2.10rc1-2 13 10210 12.so.0.10[.0] * 1.2.10 13 10210 12.so.0.10[.0] + * 1.4.0beta1-5 14 10400 14.so.0.0[.0] * 1.2.11beta1-4 13 10211 12.so.0.11[.0] - * 1.0.19rc1-5 10 10019 10.so.0.19[.0] - * 1.2.11rc1-5 13 10211 12.so.0.11[.0] - * 1.0.19 10 10019 10.so.0.19[.0] + * 1.4.0beta7-8 14 10400 14.so.0.0[.0] * 1.2.11 13 10211 12.so.0.11[.0] - * 1.0.20 10 10020 10.so.0.20[.0] * 1.2.12 13 10212 12.so.0.12[.0] - * 1.2.13beta1 13 10213 12.so.0.13[.0] - * 1.0.21 10 10021 10.so.0.21[.0] + * 1.4.0beta9-14 14 10400 14.so.0.0[.0] * 1.2.13 13 10213 12.so.0.13[.0] - * 1.2.14beta1-2 13 10214 12.so.0.14[.0] - * 1.0.22rc1 10 10022 10.so.0.22[.0] - * 1.2.14rc1 13 10214 12.so.0.14[.0] - * 1.0.22 10 10022 10.so.0.22[.0] - * 1.2.14 13 10214 12.so.0.14[.0] - * 1.2.15beta1-6 13 10215 12.so.0.15[.0] - * 1.0.23rc1-5 10 10023 10.so.0.23[.0] - * 1.2.15rc1-5 13 10215 12.so.0.15[.0] - * 1.0.23 10 10023 10.so.0.23[.0] - * 1.2.15 13 10215 12.so.0.15[.0] - * 1.2.16beta1-2 13 10216 12.so.0.16[.0] - * 1.2.16rc1 13 10216 12.so.0.16[.0] - * 1.0.24 10 10024 10.so.0.24[.0] - * 1.2.16 13 10216 12.so.0.16[.0] - * 1.2.17beta1-2 13 10217 12.so.0.17[.0] - * 1.0.25rc1 10 10025 10.so.0.25[.0] - * 1.2.17rc1-3 13 10217 12.so.0.17[.0] - * 1.0.25 10 10025 10.so.0.25[.0] - * 1.2.17 13 10217 12.so.0.17[.0] - * 1.0.26 10 10026 10.so.0.26[.0] - * 1.2.18 13 10218 12.so.0.18[.0] - * 1.2.19beta1-31 13 10219 12.so.0.19[.0] - * 1.0.27rc1-6 10 10027 10.so.0.27[.0] - * 1.2.19rc1-6 13 10219 12.so.0.19[.0] - * 1.0.27 10 10027 10.so.0.27[.0] - * 1.2.19 13 10219 12.so.0.19[.0] - * 1.2.20beta01-04 13 10220 12.so.0.20[.0] - * 1.0.28rc1-6 10 10028 10.so.0.28[.0] - * 1.2.20rc1-6 13 10220 12.so.0.20[.0] - * 1.0.28 10 10028 10.so.0.28[.0] - * 1.2.20 13 10220 12.so.0.20[.0] - * 1.2.21beta1-2 13 10221 12.so.0.21[.0] - * 1.2.21rc1-3 13 10221 12.so.0.21[.0] - * 1.0.29 10 10029 10.so.0.29[.0] - * 1.2.21 13 10221 12.so.0.21[.0] - * 1.2.22beta1-4 13 10222 12.so.0.22[.0] - * 1.0.30rc1 10 10030 10.so.0.30[.0] - * 1.2.22rc1 13 10222 12.so.0.22[.0] - * 1.0.30 10 10030 10.so.0.30[.0] - * 1.2.22 13 10222 12.so.0.22[.0] - * 1.2.23beta01-05 13 10223 12.so.0.23[.0] - * 1.2.23rc01 13 10223 12.so.0.23[.0] - * 1.2.23 13 10223 12.so.0.23[.0] - * 1.2.24beta01-02 13 10224 12.so.0.24[.0] - * 1.2.24rc01 13 10224 12.so.0.24[.0] - * 1.2.24 13 10224 12.so.0.24[.0] - * 1.2.25beta01-06 13 10225 12.so.0.25[.0] - * 1.2.25rc01-02 13 10225 12.so.0.25[.0] - * 1.0.31 10 10031 10.so.0.31[.0] - * 1.2.25 13 10225 12.so.0.25[.0] - * 1.2.26beta01-06 13 10226 12.so.0.26[.0] - * 1.2.26rc01 13 10226 12.so.0.26[.0] - * 1.2.26 13 10226 12.so.0.26[.0] - * 1.0.32 10 10032 10.so.0.32[.0] - * 1.2.27beta01-06 13 10227 12.so.0.27[.0] - * 1.2.27rc01 13 10227 12.so.0.27[.0] - * 1.0.33 10 10033 10.so.0.33[.0] - * 1.2.27 13 10227 12.so.0.27[.0] - * 1.0.34 10 10034 10.so.0.34[.0] - * 1.2.28 13 10228 12.so.0.28[.0] - * 1.2.29beta01-03 13 10229 12.so.0.29[.0] - * 1.2.29rc01 13 10229 12.so.0.29[.0] - * 1.0.35 10 10035 10.so.0.35[.0] - * 1.2.29 13 10229 12.so.0.29[.0] + * 1.4.0beta15-36 14 10400 14.so.0.0[.0] + * 1.4.0beta37-87 14 10400 14.so.14.0[.0] + * 1.4.0rc01 14 10400 14.so.14.0[.0] + * 1.4.0beta88-109 14 10400 14.so.14.0[.0] + * 1.4.0rc02-08 14 10400 14.so.14.0[.0] + * 1.4.0 14 10400 14.so.14.0[.0] + * 1.4.1beta01-03 14 10401 14.so.14.1[.0] + * 1.4.1rc01 14 10401 14.so.14.1[.0] + * 1.4.1beta04-12 14 10401 14.so.14.1[.0] + * 1.4.1 14 10401 14.so.14.1[.0] + * 1.4.2 14 10402 14.so.14.2[.0] + * 1.4.3 14 10403 14.so.14.3[.0] + * 1.4.4 14 10404 14.so.14.4[.0] + * 1.5.0beta01-58 15 10500 15.so.15.0[.0] + * 1.5.0rc01-07 15 10500 15.so.15.0[.0] + * 1.5.0 15 10500 15.so.15.0[.0] + * 1.5.1beta01-11 15 10501 15.so.15.1[.0] + * 1.5.1rc01-02 15 10501 15.so.15.1[.0] + * 1.5.1 15 10501 15.so.15.1[.0] + * 1.5.2beta01-03 15 10502 15.so.15.2[.0] + * 1.5.2rc01-03 15 10502 15.so.15.2[.0] + * 1.5.2 15 10502 15.so.15.2[.0] + * 1.5.3beta01-10 15 10503 15.so.15.3[.0] + * 1.5.3rc01-02 15 10503 15.so.15.3[.0] + * 1.5.3beta11 15 10503 15.so.15.3[.0] + * 1.5.3 [omitted] + * 1.5.4beta01-08 15 10504 15.so.15.4[.0] + * 1.5.4rc01 15 10504 15.so.15.4[.0] + * 1.5.4 15 10504 15.so.15.4[.0] + * 1.5.5beta01-08 15 10505 15.so.15.5[.0] + * 1.5.5rc01 15 10505 15.so.15.5[.0] + * 1.5.5 15 10505 15.so.15.5[.0] + * 1.5.6beta01-07 15 10506 15.so.15.6[.0] + * 1.5.6rc01-03 15 10506 15.so.15.6[.0] + * 1.5.6 15 10506 15.so.15.6[.0] + * 1.5.7beta01-05 15 10507 15.so.15.7[.0] + * 1.5.7rc01-03 15 10507 15.so.15.7[.0] + * 1.5.7 15 10507 15.so.15.7[.0] + * 1.5.8beta01 15 10508 15.so.15.8[.0] + * 1.5.8rc01 15 10508 15.so.15.8[.0] + * 1.5.8 15 10508 15.so.15.8[.0] + * 1.5.9beta01-02 15 10509 15.so.15.9[.0] + * 1.5.9rc01 15 10509 15.so.15.9[.0] + * 1.5.9 15 10509 15.so.15.9[.0] + * 1.5.10beta01-05 15 10510 15.so.15.10[.0] + * 1.5.10 15 10510 15.so.15.10[.0] * - * 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_LIBPNG_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 - * were given the previous public release number plus a letter, until - * version 1.0.6j; from then on they were given the upcoming public - * release number plus "betaNN" or "rcNN". + * 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_LIBPNG_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 + * were given the previous public release number plus a letter, until + * version 1.0.6j; from then on they were given the upcoming public + * release number plus "betaNN" or "rcNN". * - * 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. + * 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. * - * DLLNUM will change each time there are forward or backward changes - * in binary compatibility (e.g., when a new feature is added). + * DLLNUM will change each time there are forward or backward changes + * in binary compatibility (e.g., when a new feature is added). * - * See libpng.txt or libpng.3 for more information. The PNG specification - * is available as a W3C Recommendation and as an ISO Specification, - * +# endif + + /* Need the time information for converting tIME chunks, it + * defines struct tm: + */ +# ifdef PNG_CONVERT_tIME_SUPPORTED + /* "time.h" functions are not supported on all operating systems */ +# include +# endif +# endif + +/* Machine specific configuration. */ +# include "pngconf.h" +#endif /* - * Added at libpng-1.2.8 */ -/* Ref MSDN: Private as priority over Special + * Added at libpng-1.2.8 + * + * Ref MSDN: Private as priority over Special * VS_FF_PRIVATEBUILD File *was not* built using standard release * procedures. If this value is given, the StringFileInfo block must - * contain a PrivateBuild string. + * contain a PrivateBuild string. * * VS_FF_SPECIALBUILD File *was* built by the original company using * standard release procedures but is a variation of the standard * file of the same version number. If this value is given, the - * StringFileInfo block must contain a SpecialBuild string. + * StringFileInfo block must contain a SpecialBuild string. */ -#if defined(PNG_USER_PRIVATEBUILD) +#ifdef PNG_USER_PRIVATEBUILD /* From pnglibconf.h */ # define PNG_LIBPNG_BUILD_TYPE \ - (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE) + (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE) #else -# if defined(PNG_LIBPNG_SPECIALBUILD) +# ifdef PNG_LIBPNG_SPECIALBUILD # define PNG_LIBPNG_BUILD_TYPE \ - (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL) + (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL) # else # define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE) # endif @@ -475,73 +490,61 @@ extern "C" { #endif /* __cplusplus */ -/* This file is arranged in several sections. The first section contains - * structure and type definitions. The second section contains the external - * library functions, while the third has the internal library functions, - * which applications aren't expected to use directly. - */ - -#ifndef PNG_NO_TYPECAST_NULL -#define int_p_NULL (int *)NULL -#define png_bytep_NULL (png_bytep)NULL -#define png_bytepp_NULL (png_bytepp)NULL -#define png_doublep_NULL (png_doublep)NULL -#define png_error_ptr_NULL (png_error_ptr)NULL -#define png_flush_ptr_NULL (png_flush_ptr)NULL -#define png_free_ptr_NULL (png_free_ptr)NULL -#define png_infopp_NULL (png_infopp)NULL -#define png_malloc_ptr_NULL (png_malloc_ptr)NULL -#define png_read_status_ptr_NULL (png_read_status_ptr)NULL -#define png_rw_ptr_NULL (png_rw_ptr)NULL -#define png_structp_NULL (png_structp)NULL -#define png_uint_16p_NULL (png_uint_16p)NULL -#define png_voidp_NULL (png_voidp)NULL -#define png_write_status_ptr_NULL (png_write_status_ptr)NULL -#else -#define int_p_NULL NULL -#define png_bytep_NULL NULL -#define png_bytepp_NULL NULL -#define png_doublep_NULL NULL -#define png_error_ptr_NULL NULL -#define png_flush_ptr_NULL NULL -#define png_free_ptr_NULL NULL -#define png_infopp_NULL NULL -#define png_malloc_ptr_NULL NULL -#define png_read_status_ptr_NULL NULL -#define png_rw_ptr_NULL NULL -#define png_structp_NULL NULL -#define png_uint_16p_NULL NULL -#define png_voidp_NULL NULL -#define png_write_status_ptr_NULL NULL -#endif - -/* variables declared in png.c - only it needs to define PNG_NO_EXTERN */ -#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN) /* Version information for C files, stored in png.c. This had better match * the version above. */ -#ifdef PNG_USE_GLOBAL_ARRAYS -PNG_EXPORT_VAR (PNG_CONST char) png_libpng_ver[18]; - /* need room for 99.99.99beta99z */ -#else #define png_libpng_ver png_get_header_ver(NULL) -#endif -#ifdef PNG_USE_GLOBAL_ARRAYS -/* This was removed in version 1.0.5c */ -/* Structures to facilitate easy interlacing. See png.c for more details */ -PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_start[7]; -PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_inc[7]; -PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_ystart[7]; -PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_yinc[7]; -PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_mask[7]; -PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_dsp_mask[7]; -/* This isn't currently used. If you need it, see png.c for more details. -PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_height[7]; -*/ -#endif +/* This file is arranged in several sections: + * + * 1. Any configuration options that can be specified by for the application + * code when it is built. (Build time configuration is in pnglibconf.h) + * 2. Type definitions (base types are defined in pngconf.h), structure + * definitions. + * 3. Exported library functions. + * + * The library source code has additional files (principally pngpriv.h) that + * allow configuration of the library. + */ +/* Section 1: run time configuration + * See pnglibconf.h for build time configuration + * + * Run time configuration allows the application to choose between + * implementations of certain arithmetic APIs. The default is set + * at build time and recorded in pnglibconf.h, but it is safe to + * override these (and only these) settings. Note that this won't + * change what the library does, only application code, and the + * settings can (and probably should) be made on a per-file basis + * by setting the #defines before including png.h + * + * Use macros to read integers from PNG data or use the exported + * functions? + * PNG_USE_READ_MACROS: use the macros (see below) Note that + * the macros evaluate their argument multiple times. + * PNG_NO_USE_READ_MACROS: call the relevant library function. + * + * Use the alternative algorithm for compositing alpha samples that + * does not use division? + * PNG_READ_COMPOSITE_NODIV_SUPPORTED: use the 'no division' + * algorithm. + * PNG_NO_READ_COMPOSITE_NODIV: use the 'division' algorithm. + * + * How to handle benign errors if PNG_ALLOW_BENIGN_ERRORS is + * false? + * PNG_ALLOW_BENIGN_ERRORS: map calls to the benign error + * APIs to png_warning. + * Otherwise the calls are mapped to png_error. + */ -#endif /* PNG_NO_EXTERN */ +/* Section 2: type definitions, including structures and compile time + * constants. + * See pngconf.h for base types that vary by machine/system + */ + +/* This triggers a compiler error in png.c, if png.c and png.h + * do not agree upon the version number. + */ +typedef char* png_libpng_version_1_5_10; /* Three color definitions. The order of the red, green, and blue, (and the * exact size) is not important, although the size of the fields need to @@ -554,6 +557,7 @@ typedef struct png_color_struct png_byte blue; } png_color; typedef png_color FAR * png_colorp; +typedef PNG_CONST png_color FAR * png_const_colorp; typedef png_color FAR * FAR * png_colorpp; typedef struct png_color_16_struct @@ -565,6 +569,7 @@ typedef struct png_color_16_struct png_uint_16 gray; /* for use in grayscale files */ } png_color_16; typedef png_color_16 FAR * png_color_16p; +typedef PNG_CONST png_color_16 FAR * png_const_color_16p; typedef png_color_16 FAR * FAR * png_color_16pp; typedef struct png_color_8_struct @@ -576,6 +581,7 @@ typedef struct png_color_8_struct png_byte alpha; /* for alpha channel files */ } png_color_8; typedef png_color_8 FAR * png_color_8p; +typedef PNG_CONST png_color_8 FAR * png_const_color_8p; typedef png_color_8 FAR * FAR * png_color_8pp; /* @@ -591,6 +597,7 @@ typedef struct png_sPLT_entry_struct png_uint_16 frequency; } png_sPLT_entry; typedef png_sPLT_entry FAR * png_sPLT_entryp; +typedef PNG_CONST png_sPLT_entry FAR * png_const_sPLT_entryp; typedef png_sPLT_entry FAR * FAR * png_sPLT_entrypp; /* When the depth of the sPLT palette is 8 bits, the color and alpha samples @@ -606,16 +613,26 @@ typedef struct png_sPLT_struct png_int_32 nentries; /* number of palette entries */ } png_sPLT_t; typedef png_sPLT_t FAR * png_sPLT_tp; +typedef PNG_CONST png_sPLT_t FAR * png_const_sPLT_tp; typedef png_sPLT_t FAR * FAR * png_sPLT_tpp; #ifdef PNG_TEXT_SUPPORTED /* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file, * and whether that contents is compressed or not. The "key" field - * points to a regular zero-terminated C string. The "text", "lang", and - * "lang_key" fields can be regular C strings, empty strings, or NULL pointers. - * However, the * structure returned by png_get_text() will always contain - * regular zero-terminated C strings (possibly empty), never NULL pointers, - * so they can be safely used in printf() and other string-handling functions. + * points to a regular zero-terminated C string. The "text" fields can be a + * regular C string, an empty string, or a NULL pointer. + * However, the structure returned by png_get_text() will always contain + * the "text" field as a regular zero-terminated C string (possibly + * empty), never a NULL pointer, so it can be safely used in printf() and + * other string-handling functions. Note that the "itxt_length", "lang", and + * "lang_key" members of the structure only exist when the library is built + * with iTXt chunk support. Prior to libpng-1.4.0 the library was built by + * default without iTXt support. Also note that when iTXt *is* supported, + * the "lang" and "lang_key" fields contain NULL pointers when the + * "compression" field contains * PNG_TEXT_COMPRESSION_NONE or + * PNG_TEXT_COMPRESSION_zTXt. Note that the "compression value" is not the + * same as what appears in the PNG tEXt/zTXt/iTXt chunk's "compression flag" + * which is always 0 or 1, or its "compression method" which is always 0. */ typedef struct png_text_struct { @@ -628,15 +645,14 @@ typedef struct png_text_struct png_charp text; /* comment, may be an empty string (ie "") or a NULL pointer */ png_size_t text_length; /* length of the text string */ -#ifdef PNG_iTXt_SUPPORTED png_size_t itxt_length; /* length of the itxt string */ png_charp lang; /* language code, 0-79 characters or a NULL pointer */ png_charp lang_key; /* keyword translated UTF-8 string, 0 or more chars or a NULL pointer */ -#endif } png_text; typedef png_text FAR * png_textp; +typedef PNG_CONST png_text FAR * png_const_textp; typedef png_text FAR * FAR * png_textpp; #endif @@ -666,317 +682,60 @@ typedef struct png_time_struct png_byte second; /* second of minute, 0 - 60 (for leap seconds) */ } png_time; typedef png_time FAR * png_timep; +typedef PNG_CONST png_time FAR * png_const_timep; typedef png_time FAR * FAR * png_timepp; -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) +#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) || \ + defined(PNG_HANDLE_AS_UNKNOWN_SUPPORTED) /* png_unknown_chunk is a structure to hold queued chunks for which there is * no specific support. The idea is that we can use this to queue * up private chunks for output even though the library doesn't actually * know about their semantics. */ -#define PNG_CHUNK_NAME_LENGTH 5 typedef struct png_unknown_chunk_t { - png_byte name[PNG_CHUNK_NAME_LENGTH]; + png_byte name[5]; png_byte *data; png_size_t size; /* libpng-using applications should NOT directly modify this byte. */ png_byte location; /* mode of operation at read time */ } + + png_unknown_chunk; typedef png_unknown_chunk FAR * png_unknown_chunkp; +typedef PNG_CONST png_unknown_chunk FAR * png_const_unknown_chunkp; typedef png_unknown_chunk FAR * FAR * png_unknown_chunkpp; #endif -/* png_info is a structure that holds the information in a PNG file so - * that the application can find out the characteristics of the image. - * If you are reading the file, this structure will tell you what is - * in the PNG file. If you are writing the file, fill in the information - * you want to put into the PNG file, then call png_write_info(). - * The names chosen should be very close to the PNG specification, so - * consult that document for information about the meaning of each field. - * - * With libpng < 0.95, it was only possible to directly set and read the - * the values in the png_info_struct, which meant that the contents and - * order of the values had to remain fixed. With libpng 0.95 and later, - * however, there are now functions that abstract the contents of - * png_info_struct from the application, so this makes it easier to use - * libpng with dynamic libraries, and even makes it possible to use - * libraries that don't have all of the libpng ancillary chunk-handing - * functionality. - * - * In any case, the order of the parameters in png_info_struct should NOT - * be changed for as long as possible to keep compatibility with applications - * that use the old direct-access method with png_info_struct. - * - * The following members may have allocated storage attached that should be - * cleaned up before the structure is discarded: palette, trans, text, - * pcal_purpose, pcal_units, pcal_params, hist, iccp_name, iccp_profile, - * splt_palettes, scal_unit, row_pointers, and unknowns. By default, these - * are automatically freed when the info structure is deallocated, if they were - * allocated internally by libpng. This behavior can be changed by means - * of the png_data_freer() function. - * - * More allocation details: all the chunk-reading functions that - * change these members go through the corresponding png_set_* - * functions. A function to clear these members is available: see - * png_free_data(). The png_set_* functions do not depend on being - * able to point info structure members to any of the storage they are - * passed (they make their own copies), EXCEPT that the png_set_text - * functions use the same storage passed to them in the text_ptr or - * itxt_ptr structure argument, and the png_set_rows and png_set_unknowns - * functions do not make their own copies. +/* Values for the unknown chunk location byte */ + +#define PNG_HAVE_IHDR 0x01 +#define PNG_HAVE_PLTE 0x02 +#define PNG_AFTER_IDAT 0x08 + +/* The complete definition of png_info has, as of libpng-1.5.0, + * been moved into a separate header file that is not accessible to + * applications. Read libpng-manual.txt or libpng.3 for more info. */ -typedef struct png_info_struct -{ - /* the following are necessary for every PNG file */ - png_uint_32 width; /* width of image in pixels (from IHDR) */ - png_uint_32 height; /* height of image in pixels (from IHDR) */ - png_uint_32 valid; /* valid chunk data (see PNG_INFO_ below) */ - png_uint_32 rowbytes; /* bytes needed to hold an untransformed row */ - png_colorp palette; /* array of color values (valid & PNG_INFO_PLTE) */ - png_uint_16 num_palette; /* number of color entries in "palette" (PLTE) */ - png_uint_16 num_trans; /* number of transparent palette color (tRNS) */ - png_byte bit_depth; /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */ - png_byte color_type; /* see PNG_COLOR_TYPE_ below (from IHDR) */ - /* The following three should have been named *_method not *_type */ - png_byte compression_type; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */ - png_byte filter_type; /* must be PNG_FILTER_TYPE_BASE (from IHDR) */ - png_byte interlace_type; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */ - - /* The following is informational only on read, and not used on writes. */ - png_byte channels; /* number of data channels per pixel (1, 2, 3, 4) */ - png_byte pixel_depth; /* number of bits per pixel */ - png_byte spare_byte; /* to align the data, and for future use */ - png_byte signature[8]; /* magic bytes read by libpng from start of file */ - - /* The rest of the data is optional. If you are reading, check the - * valid field to see if the information in these are valid. If you - * are writing, set the valid field to those chunks you want written, - * and initialize the appropriate fields below. - */ - -#if defined(PNG_gAMA_SUPPORTED) && defined(PNG_FLOATING_POINT_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]. - * Data is valid if (valid & PNG_INFO_gAMA) is non-zero. - */ - float gamma; /* gamma value of image, if (valid & PNG_INFO_gAMA) */ -#endif - -#if defined(PNG_sRGB_SUPPORTED) - /* GR-P, 0.96a */ - /* Data valid if (valid & PNG_INFO_sRGB) non-zero. */ - png_byte srgb_intent; /* sRGB rendering intent [0, 1, 2, or 3] */ -#endif - -#if defined(PNG_TEXT_SUPPORTED) - /* The tEXt, and zTXt chunks contain human-readable textual data in - * uncompressed, compressed, and optionally compressed forms, respectively. - * The data in "text" is an array of pointers to uncompressed, - * null-terminated C strings. Each chunk has a keyword that describes the - * textual data contained in that chunk. Keywords are not required to be - * unique, and the text string may be empty. Any number of text chunks may - * be in an image. - */ - int num_text; /* number of comments read/to write */ - int max_text; /* current size of text array */ - png_textp text; /* array of comments read/to write */ -#endif /* PNG_TEXT_SUPPORTED */ - -#if defined(PNG_tIME_SUPPORTED) - /* The tIME chunk holds the last time the displayed image data was - * modified. See the png_time struct for the contents of this struct. - */ - png_time mod_time; -#endif - -#if defined(PNG_sBIT_SUPPORTED) - /* The sBIT chunk specifies the number of significant high-order bits - * in the pixel data. Values are in the range [1, bit_depth], and are - * only specified for the channels in the pixel data. The contents of - * the low-order bits is not specified. Data is valid if - * (valid & PNG_INFO_sBIT) is non-zero. - */ - png_color_8 sig_bit; /* significant bits in color channels */ -#endif - -#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_EXPAND_SUPPORTED) || \ -defined(PNG_READ_BACKGROUND_SUPPORTED) - /* The tRNS chunk supplies transparency data for paletted images and - * other image types that don't need a full alpha channel. There are - * "num_trans" transparency values for a paletted image, stored in the - * same order as the palette colors, starting from index 0. Values - * for the data are in the range [0, 255], ranging from fully transparent - * to fully opaque, respectively. For non-paletted images, there is a - * single color specified that should be treated as fully transparent. - * Data is valid if (valid & PNG_INFO_tRNS) is non-zero. - */ - png_bytep trans; /* transparent values for paletted image */ - png_color_16 trans_values; /* transparent color for non-palette image */ -#endif - -#if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) - /* The bKGD chunk gives the suggested image background color if the - * display program does not have its own background color and the image - * is needs to composited onto a background before display. The colors - * in "background" are normally in the same color space/depth as the - * pixel data. Data is valid if (valid & PNG_INFO_bKGD) is non-zero. - */ - png_color_16 background; -#endif - -#if defined(PNG_oFFs_SUPPORTED) - /* The oFFs chunk gives the offset in "offset_unit_type" units rightwards - * and downwards from the top-left corner of the display, page, or other - * application-specific co-ordinate space. See the PNG_OFFSET_ defines - * below for the unit types. Valid if (valid & PNG_INFO_oFFs) non-zero. - */ - png_int_32 x_offset; /* x offset on page */ - png_int_32 y_offset; /* y offset on page */ - png_byte offset_unit_type; /* offset units type */ -#endif - -#if defined(PNG_pHYs_SUPPORTED) - /* The pHYs chunk gives the physical pixel density of the image for - * display or printing in "phys_unit_type" units (see PNG_RESOLUTION_ - * defines below). Data is valid if (valid & PNG_INFO_pHYs) is non-zero. - */ - png_uint_32 x_pixels_per_unit; /* horizontal pixel density */ - png_uint_32 y_pixels_per_unit; /* vertical pixel density */ - png_byte phys_unit_type; /* resolution type (see PNG_RESOLUTION_ below) */ -#endif - -#if defined(PNG_hIST_SUPPORTED) - /* The hIST chunk contains the relative frequency or importance of the - * various palette entries, so that a viewer can intelligently select a - * reduced-color palette, if required. Data is an array of "num_palette" - * values in the range [0,65535]. Data valid if (valid & PNG_INFO_hIST) - * is non-zero. - */ - png_uint_16p hist; -#endif - -#ifdef PNG_cHRM_SUPPORTED - /* The cHRM chunk describes the CIE color characteristics of the monitor - * on which the PNG was created. This data allows the viewer to do gamut - * mapping of the input image to ensure that the viewer sees the same - * colors in the image as the creator. Values are in the range - * [0.0, 0.8]. Data valid if (valid & PNG_INFO_cHRM) non-zero. - */ -#ifdef PNG_FLOATING_POINT_SUPPORTED - float x_white; - float y_white; - float x_red; - float y_red; - float x_green; - float y_green; - float x_blue; - float y_blue; -#endif -#endif - -#if defined(PNG_pCAL_SUPPORTED) - /* The pCAL chunk describes a transformation between the stored pixel - * values and original physical data values used to create the image. - * The integer range [0, 2^bit_depth - 1] maps to the floating-point - * range given by [pcal_X0, pcal_X1], and are further transformed by a - * (possibly non-linear) transformation function given by "pcal_type" - * and "pcal_params" into "pcal_units". Please see the PNG_EQUATION_ - * defines below, and the PNG-Group's PNG extensions document for a - * complete description of the transformations and how they should be - * implemented, and for a description of the ASCII parameter strings. - * Data values are valid if (valid & PNG_INFO_pCAL) non-zero. - */ - png_charp pcal_purpose; /* pCAL chunk description string */ - png_int_32 pcal_X0; /* minimum value */ - png_int_32 pcal_X1; /* maximum value */ - png_charp pcal_units; /* Latin-1 string giving physical units */ - png_charpp pcal_params; /* ASCII strings containing parameter values */ - png_byte pcal_type; /* equation type (see PNG_EQUATION_ below) */ - png_byte pcal_nparams; /* number of parameters given in pcal_params */ -#endif - -/* New members added in libpng-1.0.6 */ -#ifdef PNG_FREE_ME_SUPPORTED - png_uint_32 free_me; /* flags items libpng is responsible for freeing */ -#endif - -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) - /* storage for unknown chunks that the library doesn't recognize. */ - png_unknown_chunkp unknown_chunks; - png_size_t unknown_chunks_num; -#endif - -#if defined(PNG_iCCP_SUPPORTED) - /* iCCP chunk data. */ - png_charp iccp_name; /* profile name */ - png_charp iccp_profile; /* International Color Consortium profile data */ - /* Note to maintainer: should be png_bytep */ - png_uint_32 iccp_proflen; /* ICC profile data length */ - png_byte iccp_compression; /* Always zero */ -#endif - -#if defined(PNG_sPLT_SUPPORTED) - /* data on sPLT chunks (there may be more than one). */ - png_sPLT_tp splt_palettes; - png_uint_32 splt_palettes_num; -#endif - -#if defined(PNG_sCAL_SUPPORTED) - /* The sCAL chunk describes the actual physical dimensions of the - * subject matter of the graphic. The chunk contains a unit specification - * a byte value, and two ASCII strings representing floating-point - * values. The values are width and height corresponsing to one pixel - * in the image. This external representation is converted to double - * here. Data values are valid if (valid & PNG_INFO_sCAL) is non-zero. - */ - png_byte scal_unit; /* unit of physical scale */ -#ifdef PNG_FLOATING_POINT_SUPPORTED - double scal_pixel_width; /* width of one pixel */ - double scal_pixel_height; /* height of one pixel */ -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED - png_charp scal_s_width; /* string containing height */ - png_charp scal_s_height; /* string containing width */ -#endif -#endif - -#if defined(PNG_INFO_IMAGE_SUPPORTED) - /* Memory has been allocated if (valid & PNG_ALLOCATED_INFO_ROWS) non-zero */ - /* Data valid if (valid & PNG_INFO_IDAT) non-zero */ - png_bytepp row_pointers; /* the image bits */ -#endif - -#if defined(PNG_FIXED_POINT_SUPPORTED) && defined(PNG_gAMA_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_info; - +typedef struct png_info_def png_info; typedef png_info FAR * png_infop; +typedef PNG_CONST png_info FAR * png_const_infop; typedef png_info FAR * FAR * png_infopp; /* Maximum positive integer used in PNG is (2^31)-1 */ #define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL) #define PNG_UINT_32_MAX ((png_uint_32)(-1)) #define PNG_SIZE_MAX ((png_size_t)(-1)) -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -/* PNG_MAX_UINT is deprecated; use PNG_UINT_31_MAX instead. */ -#define PNG_MAX_UINT PNG_UINT_31_MAX -#endif + +/* These are constants for fixed point values encoded in the + * PNG specification manner (x100000) + */ +#define PNG_FP_1 100000 +#define PNG_FP_HALF 50000 +#define PNG_FP_MAX ((png_fixed_point)0x7fffffffL) +#define PNG_FP_MIN (-PNG_FP_MAX) /* These describe the color_type field in png_info. */ /* color type masks */ @@ -1064,7 +823,7 @@ typedef png_info FAR * FAR * png_infopp; #define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */ #define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */ #define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */ -#define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 */ +#define PNG_INFO_IDAT 0x8000 /* ESR, 1.0.6 */ /* This is used for the transformation routines, as some of them * change these values for the row. It also should enable using @@ -1072,53 +831,86 @@ typedef png_info FAR * FAR * png_infopp; */ typedef struct png_row_info_struct { - png_uint_32 width; /* width of row */ - png_uint_32 rowbytes; /* number of bytes in row */ - png_byte color_type; /* color type of row */ - png_byte bit_depth; /* bit depth of row */ - png_byte channels; /* number of channels (1, 2, 3, or 4) */ + png_uint_32 width; /* width of row */ + png_size_t rowbytes; /* number of bytes in row */ + png_byte color_type; /* color type of row */ + png_byte bit_depth; /* bit depth of row */ + png_byte channels; /* number of channels (1, 2, 3, or 4) */ png_byte pixel_depth; /* bits per pixel (depth * channels) */ } png_row_info; typedef png_row_info FAR * png_row_infop; typedef png_row_info FAR * FAR * png_row_infopp; +/* The complete definition of png_struct has, as of libpng-1.5.0, + * been moved into a separate header file that is not accessible to + * applications. Read libpng-manual.txt or libpng.3 for more info. + */ +typedef struct png_struct_def png_struct; +typedef PNG_CONST png_struct FAR * png_const_structp; +typedef png_struct FAR * png_structp; + /* These are the function types for the I/O functions and for the functions * that allow the user to override the default I/O functions with his or her * own. The png_error_ptr type should match that of user-supplied warning * and error functions, while the png_rw_ptr type should match that of the - * user read/write data functions. + * user read/write data functions. Note that the 'write' function must not + * modify the buffer it is passed. The 'read' function, on the other hand, is + * expected to return the read data in the buffer. */ -typedef struct png_struct_def png_struct; -typedef png_struct FAR * png_structp; - -typedef void (PNGAPI *png_error_ptr) PNGARG((png_structp, png_const_charp)); -typedef void (PNGAPI *png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t)); -typedef void (PNGAPI *png_flush_ptr) PNGARG((png_structp)); -typedef void (PNGAPI *png_read_status_ptr) PNGARG((png_structp, png_uint_32, - int)); -typedef void (PNGAPI *png_write_status_ptr) PNGARG((png_structp, png_uint_32, - int)); +typedef PNG_CALLBACK(void, *png_error_ptr, (png_structp, png_const_charp)); +typedef PNG_CALLBACK(void, *png_rw_ptr, (png_structp, png_bytep, png_size_t)); +typedef PNG_CALLBACK(void, *png_flush_ptr, (png_structp)); +typedef PNG_CALLBACK(void, *png_read_status_ptr, (png_structp, png_uint_32, + int)); +typedef PNG_CALLBACK(void, *png_write_status_ptr, (png_structp, png_uint_32, + int)); #ifdef PNG_PROGRESSIVE_READ_SUPPORTED -typedef void (PNGAPI *png_progressive_info_ptr) PNGARG((png_structp, png_infop)); -typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop)); -typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep, - png_uint_32, int)); +typedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop)); +typedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop)); + +/* The following callback receives png_uint_32 row_number, int pass for the + * png_bytep data of the row. When transforming an interlaced image the + * row number is the row number within the sub-image of the interlace pass, so + * the value will increase to the height of the sub-image (not the full image) + * then reset to 0 for the next pass. + * + * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to + * find the output pixel (x,y) given an interlaced sub-image pixel + * (row,col,pass). (See below for these macros.) + */ +typedef PNG_CALLBACK(void, *png_progressive_row_ptr, (png_structp, png_bytep, + png_uint_32, int)); #endif #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_LEGACY_SUPPORTED) -typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp, - png_row_infop, png_bytep)); + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) +typedef PNG_CALLBACK(void, *png_user_transform_ptr, (png_structp, png_row_infop, + png_bytep)); #endif -#if defined(PNG_USER_CHUNKS_SUPPORTED) -typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp)); +#ifdef PNG_USER_CHUNKS_SUPPORTED +typedef PNG_CALLBACK(int, *png_user_chunk_ptr, (png_structp, + png_unknown_chunkp)); #endif -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) -typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp)); +#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED +typedef PNG_CALLBACK(void, *png_unknown_chunk_ptr, (png_structp)); +#endif + +#ifdef PNG_SETJMP_SUPPORTED +/* This must match the function definition in , and the application + * must include this before png.h to obtain the definition of jmp_buf. The + * function is required to be PNG_NORETURN, but this is not checked. If the + * function does return the application will crash via an abort() or similar + * system level call. + * + * If you get a warning here while building the library you may need to make + * changes to ensure that pnglibconf.h records the calling convention used by + * your compiler. This may be very difficult - try using a different compiler + * to build the library! + */ +PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), PNGARG((jmp_buf, int)), typedef); #endif /* Transform masks for the high-level interface */ @@ -1134,671 +926,658 @@ typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp)); #define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */ #define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */ #define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */ -#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* WRITE only */ +#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* write only */ +/* Added to libpng-1.2.34 */ +#define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER +#define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */ +/* Added to libpng-1.4.0 */ +#define PNG_TRANSFORM_GRAY_TO_RGB 0x2000 /* read only */ +/* Added to libpng-1.5.4 */ +#define PNG_TRANSFORM_EXPAND_16 0x4000 /* read only */ +#define PNG_TRANSFORM_SCALE_16 0x8000 /* read only */ /* Flags for MNG supported features */ #define PNG_FLAG_MNG_EMPTY_PLTE 0x01 #define PNG_FLAG_MNG_FILTER_64 0x04 #define PNG_ALL_MNG_FEATURES 0x05 -typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t)); -typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp)); - -/* The structure that holds the information to read and write PNG files. - * The only people who need to care about what is inside of this are the - * people who will be modifying the library for their own special needs. - * It should NOT be accessed directly by an application, except to store - * the jmp_buf. +/* NOTE: prior to 1.5 these functions had no 'API' style declaration, + * this allowed the zlib default functions to be used on Windows + * platforms. In 1.5 the zlib default malloc (which just calls malloc and + * ignores the first argument) should be completely compatible with the + * following. */ - -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 - -/* These were added in libpng-1.0.2 */ -#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) -#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 -#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 */ -#ifndef PNG_NO_WRITE_FILTERING - 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 */ -#endif - 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) -#ifdef PNG_LEGACY_SUPPORTED - png_byte filler; /* filler byte for pixel expansion */ -#else - png_uint_16 filler; /* filler bytes for pixel expansion */ -#endif -#endif - -#if defined(PNG_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 -#endif /* PNG_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_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_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_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_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_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 - -/* New members added in libpng-1.0.6 */ - -#ifdef PNG_FREE_ME_SUPPORTED - png_uint_32 free_me; /* flags items libpng is responsible for freeing */ -#endif - -#if defined(PNG_USER_CHUNKS_SUPPORTED) - png_voidp user_chunk_ptr; - png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */ -#endif - -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) - int num_chunk_list; - png_bytep chunk_list; -#endif - -/* New members added in libpng-1.0.3 */ -#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) - png_byte rgb_to_gray_status; - /* These were changed from png_byte in libpng-1.0.6 */ - 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 - -/* New member added in libpng-1.0.4 (renamed in 1.0.9) */ -#if defined(PNG_MNG_FEATURES_SUPPORTED) || \ - defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ - defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) -/* changed from png_byte to png_uint_32 at version 1.2.0 */ -#ifdef PNG_1_0_X - png_byte mng_features_permitted; -#else - png_uint_32 mng_features_permitted; -#endif /* PNG_1_0_X */ -#endif - -/* New member added in libpng-1.0.7 */ -#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) - png_fixed_point int_gamma; -#endif - -/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */ -#if defined(PNG_MNG_FEATURES_SUPPORTED) - png_byte filter_type; -#endif - -#if defined(PNG_1_0_X) -/* New member added in libpng-1.0.10, ifdef'ed out in 1.2.0 */ - png_uint_32 row_buf_size; -#endif - -/* New members added in libpng-1.2.0 */ -#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) -# if !defined(PNG_1_0_X) -# if defined(PNG_MMX_CODE_SUPPORTED) - png_byte mmx_bitdepth_threshold; - png_uint_32 mmx_rowbytes_threshold; -# endif - png_uint_32 asm_flags; -# endif -#endif - -/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */ -#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 - -/* New member added in libpng-1.0.13 and 1.2.0 */ - png_bytep big_row_buf; /* buffer to save current (unfiltered) row */ - -#if defined(PNG_READ_DITHER_SUPPORTED) -/* The following three members were added at version 1.0.14 and 1.2.4 */ - png_bytep dither_sort; /* working sort array */ - png_bytep index_to_palette; /* where the original index currently is */ - /* in the palette */ - png_bytep palette_to_index; /* which original index points to this */ - /* palette color */ -#endif - -/* New members added in libpng-1.0.16 and 1.2.6 */ - png_byte compression_type; - -#ifdef PNG_SET_USER_LIMITS_SUPPORTED - png_uint_32 user_width_max; - png_uint_32 user_height_max; -#endif - -/* New member added in libpng-1.0.25 and 1.2.17 */ -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) - /* storage for unknown chunk that the library doesn't recognize. */ - png_unknown_chunk unknown_chunk; -#endif - -/* New members added in libpng-1.2.26 */ - png_uint_32 old_big_row_buf_size, old_prev_row_size; -}; - - -/* This triggers a compiler error in png.c, if png.c and png.h - * do not agree upon the version number. - */ -typedef png_structp version_1_2_29; +typedef PNG_CALLBACK(png_voidp, *png_malloc_ptr, (png_structp, + png_alloc_size_t)); +typedef PNG_CALLBACK(void, *png_free_ptr, (png_structp, png_voidp)); typedef png_struct FAR * FAR * png_structpp; -/* Here are the function definitions most commonly used. This is not - * the place to find out how to use libpng. See libpng.txt for the +/* Section 3: exported functions + * Here are the function definitions most commonly used. This is not + * the place to find out how to use libpng. See libpng-manual.txt for the * full explanation, see example.c for the summary. This just provides * a simple one line description of the use of each function. + * + * The PNG_EXPORT() and PNG_EXPORTA() macros used below are defined in + * pngconf.h and in the *.dfn files in the scripts directory. + * + * PNG_EXPORT(ordinal, type, name, (args)); + * + * ordinal: ordinal that is used while building + * *.def files. The ordinal value is only + * relevant when preprocessing png.h with + * the *.dfn files for building symbol table + * entries, and are removed by pngconf.h. + * type: return type of the function + * name: function name + * args: function arguments, with types + * + * When we wish to append attributes to a function prototype we use + * the PNG_EXPORTA() macro instead. + * + * PNG_EXPORTA(ordinal, type, name, (args), attributes); + * + * ordinal, type, name, and args: same as in PNG_EXPORT(). + * attributes: function attributes */ /* Returns the version number of the library */ -extern PNG_EXPORT(png_uint_32,png_access_version_number) PNGARG((void)); +PNG_EXPORT(1, png_uint_32, png_access_version_number, (void)); /* Tell lib we have already handled the first magic bytes. * Handling more than 8 bytes from the beginning of the file is an error. */ -extern PNG_EXPORT(void,png_set_sig_bytes) PNGARG((png_structp png_ptr, - int num_bytes)); +PNG_EXPORT(2, void, png_set_sig_bytes, (png_structp png_ptr, int num_bytes)); /* Check sig[start] through sig[start + num_to_check - 1] to see if it's a * PNG file. Returns zero if the supplied bytes match the 8-byte PNG * signature, and non-zero otherwise. Having num_to_check == 0 or * start > 7 will always fail (ie return non-zero). */ -extern PNG_EXPORT(int,png_sig_cmp) PNGARG((png_bytep sig, png_size_t start, - png_size_t num_to_check)); +PNG_EXPORT(3, int, png_sig_cmp, (png_const_bytep sig, png_size_t start, + png_size_t num_to_check)); /* Simple signature checking function. This is the same as calling * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n). */ -extern PNG_EXPORT(int,png_check_sig) PNGARG((png_bytep sig, int num)); +#define png_check_sig(sig, n) !png_sig_cmp((sig), 0, (n)) /* Allocate and initialize png_ptr struct for reading, and any other memory. */ -extern PNG_EXPORT(png_structp,png_create_read_struct) - PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warn_fn)); +PNG_EXPORTA(4, png_structp, png_create_read_struct, + (png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn), + PNG_ALLOCATED); /* Allocate and initialize png_ptr struct for writing, and any other memory */ -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)); +PNG_EXPORTA(5, png_structp, png_create_write_struct, + (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, + png_error_ptr warn_fn), + PNG_ALLOCATED); -#ifdef PNG_WRITE_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_compression_buffer_size) - PNGARG((png_structp png_ptr)); -#endif - -#ifdef PNG_WRITE_SUPPORTED -extern PNG_EXPORT(void,png_set_compression_buffer_size) - PNGARG((png_structp png_ptr, png_uint_32 size)); +PNG_EXPORT(6, png_size_t, png_get_compression_buffer_size, + (png_const_structp png_ptr)); + +PNG_EXPORT(7, void, png_set_compression_buffer_size, (png_structp png_ptr, + png_size_t size)); + +/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp + * match up. + */ +#ifdef PNG_SETJMP_SUPPORTED +/* This function returns the jmp_buf built in to *png_ptr. It must be + * supplied with an appropriate 'longjmp' function to use on that jmp_buf + * unless the default error function is overridden in which case NULL is + * acceptable. The size of the jmp_buf is checked against the actual size + * allocated by the library - the call will return NULL on a mismatch + * indicating an ABI mismatch. + */ +PNG_EXPORT(8, jmp_buf*, png_set_longjmp_fn, (png_structp png_ptr, + png_longjmp_ptr longjmp_fn, size_t jmp_buf_size)); +# define png_jmpbuf(png_ptr) \ + (*png_set_longjmp_fn((png_ptr), longjmp, sizeof (jmp_buf))) +#else +# define png_jmpbuf(png_ptr) \ + (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP) #endif +/* This function should be used by libpng applications in place of + * longjmp(png_ptr->jmpbuf, val). If longjmp_fn() has been set, it + * will use it; otherwise it will call PNG_ABORT(). This function was + * added in libpng-1.5.0. + */ +PNG_EXPORTA(9, void, png_longjmp, (png_structp png_ptr, int val), + PNG_NORETURN); +#ifdef PNG_READ_SUPPORTED /* Reset the compression stream */ -extern PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr)); +PNG_EXPORT(10, int, png_reset_zstream, (png_structp png_ptr)); +#endif /* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */ #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, - png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, - png_malloc_ptr malloc_fn, png_free_ptr free_fn)); -extern PNG_EXPORT(png_structp,png_create_write_struct_2) - PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, - png_malloc_ptr malloc_fn, png_free_ptr free_fn)); +PNG_EXPORTA(11, png_structp, png_create_read_struct_2, + (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, + png_error_ptr warn_fn, + png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn), + PNG_ALLOCATED); +PNG_EXPORTA(12, png_structp, png_create_write_struct_2, + (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, + png_error_ptr warn_fn, + png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn), + PNG_ALLOCATED); #endif +/* Write the PNG file signature. */ +PNG_EXPORT(13, void, png_write_sig, (png_structp png_ptr)); + /* Write a PNG chunk - size, type, (optional) data, CRC. */ -extern PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr, - png_bytep chunk_name, png_bytep data, png_size_t length)); +PNG_EXPORT(14, void, png_write_chunk, (png_structp png_ptr, png_const_bytep + chunk_name, png_const_bytep data, png_size_t length)); /* Write the start of a PNG chunk - length and chunk name. */ -extern PNG_EXPORT(void,png_write_chunk_start) PNGARG((png_structp png_ptr, - png_bytep chunk_name, png_uint_32 length)); +PNG_EXPORT(15, void, png_write_chunk_start, (png_structp png_ptr, + png_const_bytep chunk_name, png_uint_32 length)); /* Write the data of a PNG chunk started with png_write_chunk_start(). */ -extern PNG_EXPORT(void,png_write_chunk_data) PNGARG((png_structp png_ptr, - png_bytep data, png_size_t length)); +PNG_EXPORT(16, void, png_write_chunk_data, (png_structp png_ptr, + png_const_bytep data, png_size_t length)); /* Finish a chunk started with png_write_chunk_start() (includes CRC). */ -extern PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr)); +PNG_EXPORT(17, void, png_write_chunk_end, (png_structp png_ptr)); /* Allocate and initialize the info structure */ -extern PNG_EXPORT(png_infop,png_create_info_struct) - PNGARG((png_structp png_ptr)); +PNG_EXPORTA(18, png_infop, png_create_info_struct, (png_structp png_ptr), + PNG_ALLOCATED); -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -/* Initialize the info structure (old interface - DEPRECATED) */ -extern PNG_EXPORT(void,png_info_init) PNGARG((png_infop info_ptr)); -#undef png_info_init -#define png_info_init(info_ptr) png_info_init_3(&info_ptr,\ - png_sizeof(png_info)); -#endif - -extern PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr, +PNG_EXPORT(19, void, png_info_init_3, (png_infopp info_ptr, png_size_t png_info_struct_size)); /* Writes all the PNG information before the image. */ -extern PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr, - png_infop info_ptr)); -extern PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr, - png_infop info_ptr)); +PNG_EXPORT(20, void, png_write_info_before_PLTE, + (png_structp png_ptr, png_infop info_ptr)); +PNG_EXPORT(21, void, png_write_info, + (png_structp png_ptr, png_infop info_ptr)); -#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED -/* read the information before the actual image data. */ -extern PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr, - png_infop info_ptr)); +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read the information before the actual image data. */ +PNG_EXPORT(22, void, png_read_info, + (png_structp png_ptr, png_infop info_ptr)); #endif -#if defined(PNG_TIME_RFC1123_SUPPORTED) -extern PNG_EXPORT(png_charp,png_convert_to_rfc1123) - PNGARG((png_structp png_ptr, png_timep ptime)); +#ifdef PNG_TIME_RFC1123_SUPPORTED +PNG_EXPORT(23, png_const_charp, png_convert_to_rfc1123, + (png_structp png_ptr, + png_const_timep ptime)); #endif -#if !defined(_WIN32_WCE) -/* "time.h" functions are not supported on WindowsCE */ -#if defined(PNG_WRITE_tIME_SUPPORTED) -/* convert from a struct tm to png_time */ -extern PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime, - struct tm FAR * ttime)); +#ifdef PNG_CONVERT_tIME_SUPPORTED +/* Convert from a struct tm to png_time */ +PNG_EXPORT(24, void, png_convert_from_struct_tm, (png_timep ptime, + PNG_CONST struct tm FAR * ttime)); -/* convert from time_t to png_time. Uses gmtime() */ -extern PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime, - time_t ttime)); -#endif /* PNG_WRITE_tIME_SUPPORTED */ -#endif /* _WIN32_WCE */ +/* Convert from time_t to png_time. Uses gmtime() */ +PNG_EXPORT(25, void, png_convert_from_time_t, + (png_timep ptime, time_t ttime)); +#endif /* PNG_CONVERT_tIME_SUPPORTED */ -#if defined(PNG_READ_EXPAND_SUPPORTED) +#ifdef PNG_READ_EXPAND_SUPPORTED /* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */ -extern PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr)); -#if !defined(PNG_1_0_X) -extern PNG_EXPORT(void,png_set_expand_gray_1_2_4_to_8) PNGARG((png_structp - png_ptr)); -#endif -extern PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr)); -extern PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr)); -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -/* Deprecated */ -extern PNG_EXPORT(void,png_set_gray_1_2_4_to_8) PNGARG((png_structp png_ptr)); +PNG_EXPORT(26, void, png_set_expand, (png_structp png_ptr)); +PNG_EXPORT(27, void, png_set_expand_gray_1_2_4_to_8, (png_structp png_ptr)); +PNG_EXPORT(28, void, png_set_palette_to_rgb, (png_structp png_ptr)); +PNG_EXPORT(29, void, png_set_tRNS_to_alpha, (png_structp png_ptr)); #endif + +#ifdef PNG_READ_EXPAND_16_SUPPORTED +/* Expand to 16-bit channels, forces conversion of palette to RGB and expansion + * of a tRNS chunk if present. + */ +PNG_EXPORT(221, void, png_set_expand_16, (png_structp png_ptr)); #endif #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) /* Use blue, green, red order for pixels. */ -extern PNG_EXPORT(void,png_set_bgr) PNGARG((png_structp png_ptr)); +PNG_EXPORT(30, void, png_set_bgr, (png_structp png_ptr)); #endif -#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) +#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED /* Expand the grayscale to 24-bit RGB if necessary. */ -extern PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr)); +PNG_EXPORT(31, void, png_set_gray_to_rgb, (png_structp png_ptr)); #endif -#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) +#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED /* Reduce RGB to grayscale. */ -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr, - int error_action, double red, double green )); -#endif -extern PNG_EXPORT(void,png_set_rgb_to_gray_fixed) PNGARG((png_structp png_ptr, - int error_action, png_fixed_point red, png_fixed_point green )); -extern PNG_EXPORT(png_byte,png_get_rgb_to_gray_status) PNGARG((png_structp - png_ptr)); +#define PNG_ERROR_ACTION_NONE 1 +#define PNG_ERROR_ACTION_WARN 2 +#define PNG_ERROR_ACTION_ERROR 3 +#define PNG_RGB_TO_GRAY_DEFAULT (-1)/*for red/green coefficients*/ + +PNG_FP_EXPORT(32, void, png_set_rgb_to_gray, (png_structp png_ptr, + int error_action, double red, double green)); +PNG_FIXED_EXPORT(33, void, png_set_rgb_to_gray_fixed, (png_structp png_ptr, + int error_action, png_fixed_point red, png_fixed_point green)); + +PNG_EXPORT(34, png_byte, png_get_rgb_to_gray_status, (png_const_structp + png_ptr)); #endif -extern PNG_EXPORT(void,png_build_grayscale_palette) PNGARG((int bit_depth, - png_colorp palette)); +#ifdef PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED +PNG_EXPORT(35, void, png_build_grayscale_palette, (int bit_depth, + png_colorp palette)); +#endif -#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) -extern PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr)); +#ifdef PNG_READ_ALPHA_MODE_SUPPORTED +/* How the alpha channel is interpreted - this affects how the color channels of + * a PNG file are returned when an alpha channel, or tRNS chunk in a palette + * file, is present. + * + * This has no effect on the way pixels are written into a PNG output + * datastream. The color samples in a PNG datastream are never premultiplied + * with the alpha samples. + * + * The default is to return data according to the PNG specification: the alpha + * channel is a linear measure of the contribution of the pixel to the + * corresponding composited pixel. The gamma encoded color channels must be + * scaled according to the contribution and to do this it is necessary to undo + * the encoding, scale the color values, perform the composition and reencode + * the values. This is the 'PNG' mode. + * + * The alternative is to 'associate' the alpha with the color information by + * storing color channel values that have been scaled by the alpha. The + * advantage is that the color channels can be resampled (the image can be + * scaled) in this form. The disadvantage is that normal practice is to store + * linear, not (gamma) encoded, values and this requires 16-bit channels for + * still images rather than the 8-bit channels that are just about sufficient if + * gamma encoding is used. In addition all non-transparent pixel values, + * including completely opaque ones, must be gamma encoded to produce the final + * image. This is the 'STANDARD', 'ASSOCIATED' or 'PREMULTIPLIED' mode (the + * latter being the two common names for associated alpha color channels.) + * + * Since it is not necessary to perform arithmetic on opaque color values so + * long as they are not to be resampled and are in the final color space it is + * possible to optimize the handling of alpha by storing the opaque pixels in + * the PNG format (adjusted for the output color space) while storing partially + * opaque pixels in the standard, linear, format. The accuracy required for + * standard alpha composition is relatively low, because the pixels are + * isolated, therefore typically the accuracy loss in storing 8-bit linear + * values is acceptable. (This is not true if the alpha channel is used to + * simulate transparency over large areas - use 16 bits or the PNG mode in + * this case!) This is the 'OPTIMIZED' mode. For this mode a pixel is + * treated as opaque only if the alpha value is equal to the maximum value. + * + * The final choice is to gamma encode the alpha channel as well. This is + * broken because, in practice, no implementation that uses this choice + * correctly undoes the encoding before handling alpha composition. Use this + * choice only if other serious errors in the software or hardware you use + * mandate it; the typical serious error is for dark halos to appear around + * opaque areas of the composited PNG image because of arithmetic overflow. + * + * The API function png_set_alpha_mode specifies which of these choices to use + * with an enumerated 'mode' value and the gamma of the required output: + */ +#define PNG_ALPHA_PNG 0 /* according to the PNG standard */ +#define PNG_ALPHA_STANDARD 1 /* according to Porter/Duff */ +#define PNG_ALPHA_ASSOCIATED 1 /* as above; this is the normal practice */ +#define PNG_ALPHA_PREMULTIPLIED 1 /* as above */ +#define PNG_ALPHA_OPTIMIZED 2 /* 'PNG' for opaque pixels, else 'STANDARD' */ +#define PNG_ALPHA_BROKEN 3 /* the alpha channel is gamma encoded */ + +PNG_FP_EXPORT(227, void, png_set_alpha_mode, (png_structp png_ptr, int mode, + double output_gamma)); +PNG_FIXED_EXPORT(228, void, png_set_alpha_mode_fixed, (png_structp png_ptr, + int mode, png_fixed_point output_gamma)); +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_ALPHA_MODE_SUPPORTED) +/* The output_gamma value is a screen gamma in libpng terminology: it expresses + * how to decode the output values, not how they are encoded. The values used + * correspond to the normal numbers used to describe the overall gamma of a + * computer display system; for example 2.2 for an sRGB conformant system. The + * values are scaled by 100000 in the _fixed version of the API (so 220000 for + * sRGB.) + * + * The inverse of the value is always used to provide a default for the PNG file + * encoding if it has no gAMA chunk and if png_set_gamma() has not been called + * to override the PNG gamma information. + * + * When the ALPHA_OPTIMIZED mode is selected the output gamma is used to encode + * opaque pixels however pixels with lower alpha values are not encoded, + * regardless of the output gamma setting. + * + * When the standard Porter Duff handling is requested with mode 1 the output + * encoding is set to be linear and the output_gamma value is only relevant + * as a default for input data that has no gamma information. The linear output + * encoding will be overridden if png_set_gamma() is called - the results may be + * highly unexpected! + * + * The following numbers are derived from the sRGB standard and the research + * behind it. sRGB is defined to be approximated by a PNG gAMA chunk value of + * 0.45455 (1/2.2) for PNG. The value implicitly includes any viewing + * correction required to take account of any differences in the color + * environment of the original scene and the intended display environment; the + * value expresses how to *decode* the image for display, not how the original + * data was *encoded*. + * + * sRGB provides a peg for the PNG standard by defining a viewing environment. + * sRGB itself, and earlier TV standards, actually use a more complex transform + * (a linear portion then a gamma 2.4 power law) than PNG can express. (PNG is + * limited to simple power laws.) By saying that an image for direct display on + * an sRGB conformant system should be stored with a gAMA chunk value of 45455 + * (11.3.3.2 and 11.3.3.5 of the ISO PNG specification) the PNG specification + * makes it possible to derive values for other display systems and + * environments. + * + * The Mac value is deduced from the sRGB based on an assumption that the actual + * extra viewing correction used in early Mac display systems was implemented as + * a power 1.45 lookup table. + * + * Any system where a programmable lookup table is used or where the behavior of + * the final display device characteristics can be changed requires system + * specific code to obtain the current characteristic. However this can be + * difficult and most PNG gamma correction only requires an approximate value. + * + * By default, if png_set_alpha_mode() is not called, libpng assumes that all + * values are unencoded, linear, values and that the output device also has a + * linear characteristic. This is only very rarely correct - it is invariably + * better to call png_set_alpha_mode() with PNG_DEFAULT_sRGB than rely on the + * default if you don't know what the right answer is! + * + * The special value PNG_GAMMA_MAC_18 indicates an older Mac system (pre Mac OS + * 10.6) which used a correction table to implement a somewhat lower gamma on an + * otherwise sRGB system. + * + * Both these values are reserved (not simple gamma values) in order to allow + * more precise correction internally in the future. + * + * NOTE: the following values can be passed to either the fixed or floating + * point APIs, but the floating point API will also accept floating point + * values. + */ +#define PNG_DEFAULT_sRGB -1 /* sRGB gamma and color space */ +#define PNG_GAMMA_MAC_18 -2 /* Old Mac '1.8' gamma and color space */ +#define PNG_GAMMA_sRGB 220000 /* Television standards--matches sRGB gamma */ +#define PNG_GAMMA_LINEAR PNG_FP_1 /* Linear */ +#endif + +/* The following are examples of calls to png_set_alpha_mode to achieve the + * required overall gamma correction and, where necessary, alpha + * premultiplication. + * + * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB); + * This is the default libpng handling of the alpha channel - it is not + * pre-multiplied into the color components. In addition the call states + * that the output is for a sRGB system and causes all PNG files without gAMA + * chunks to be assumed to be encoded using sRGB. + * + * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); + * In this case the output is assumed to be something like an sRGB conformant + * display preceeded by a power-law lookup table of power 1.45. This is how + * early Mac systems behaved. + * + * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR); + * This is the classic Jim Blinn approach and will work in academic + * environments where everything is done by the book. It has the shortcoming + * of assuming that input PNG data with no gamma information is linear - this + * is unlikely to be correct unless the PNG files where generated locally. + * Most of the time the output precision will be so low as to show + * significant banding in dark areas of the image. + * + * png_set_expand_16(pp); + * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_DEFAULT_sRGB); + * This is a somewhat more realistic Jim Blinn inspired approach. PNG files + * are assumed to have the sRGB encoding if not marked with a gamma value and + * the output is always 16 bits per component. This permits accurate scaling + * and processing of the data. If you know that your input PNG files were + * generated locally you might need to replace PNG_DEFAULT_sRGB with the + * correct value for your system. + * + * png_set_alpha_mode(pp, PNG_ALPHA_OPTIMIZED, PNG_DEFAULT_sRGB); + * If you just need to composite the PNG image onto an existing background + * and if you control the code that does this you can use the optimization + * setting. In this case you just copy completely opaque pixels to the + * output. For pixels that are not completely transparent (you just skip + * those) you do the composition math using png_composite or png_composite_16 + * below then encode the resultant 8-bit or 16-bit values to match the output + * encoding. + * + * Other cases + * If neither the PNG nor the standard linear encoding work for you because + * of the software or hardware you use then you have a big problem. The PNG + * case will probably result in halos around the image. The linear encoding + * will probably result in a washed out, too bright, image (it's actually too + * contrasty.) Try the ALPHA_OPTIMIZED mode above - this will probably + * substantially reduce the halos. Alternatively try: + * + * png_set_alpha_mode(pp, PNG_ALPHA_BROKEN, PNG_DEFAULT_sRGB); + * This option will also reduce the halos, but there will be slight dark + * halos round the opaque parts of the image where the background is light. + * In the OPTIMIZED mode the halos will be light halos where the background + * is dark. Take your pick - the halos are unavoidable unless you can get + * your hardware/software fixed! (The OPTIMIZED approach is slightly + * faster.) + * + * When the default gamma of PNG files doesn't match the output gamma. + * If you have PNG files with no gamma information png_set_alpha_mode allows + * you to provide a default gamma, but it also sets the ouput gamma to the + * matching value. If you know your PNG files have a gamma that doesn't + * match the output you can take advantage of the fact that + * png_set_alpha_mode always sets the output gamma but only sets the PNG + * default if it is not already set: + * + * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB); + * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); + * The first call sets both the default and the output gamma values, the + * second call overrides the output gamma without changing the default. This + * is easier than achieving the same effect with png_set_gamma. You must use + * PNG_ALPHA_PNG for the first call - internal checking in png_set_alpha will + * fire if more than one call to png_set_alpha_mode and png_set_background is + * made in the same read operation, however multiple calls with PNG_ALPHA_PNG + * are ignored. + */ + +#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED +PNG_EXPORT(36, void, png_set_strip_alpha, (png_structp png_ptr)); #endif #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) -extern PNG_EXPORT(void,png_set_swap_alpha) PNGARG((png_structp png_ptr)); +PNG_EXPORT(37, void, png_set_swap_alpha, (png_structp png_ptr)); #endif #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) -extern PNG_EXPORT(void,png_set_invert_alpha) PNGARG((png_structp png_ptr)); +PNG_EXPORT(38, void, png_set_invert_alpha, (png_structp png_ptr)); #endif #if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) /* Add a filler byte to 8-bit Gray or 24-bit RGB images. */ -extern PNG_EXPORT(void,png_set_filler) PNGARG((png_structp png_ptr, - png_uint_32 filler, int flags)); +PNG_EXPORT(39, void, png_set_filler, (png_structp png_ptr, png_uint_32 filler, + int flags)); /* The values of the PNG_FILLER_ defines should NOT be changed */ -#define PNG_FILLER_BEFORE 0 -#define PNG_FILLER_AFTER 1 +# define PNG_FILLER_BEFORE 0 +# define PNG_FILLER_AFTER 1 /* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */ -#if !defined(PNG_1_0_X) -extern PNG_EXPORT(void,png_set_add_alpha) PNGARG((png_structp png_ptr, - png_uint_32 filler, int flags)); -#endif +PNG_EXPORT(40, void, png_set_add_alpha, + (png_structp png_ptr, png_uint_32 filler, + int flags)); #endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */ #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) /* Swap bytes in 16-bit depth files. */ -extern PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr)); +PNG_EXPORT(41, void, png_set_swap, (png_structp png_ptr)); #endif #if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) /* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */ -extern PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr)); +PNG_EXPORT(42, void, png_set_packing, (png_structp png_ptr)); #endif -#if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED) +#if defined(PNG_READ_PACKSWAP_SUPPORTED) || \ + defined(PNG_WRITE_PACKSWAP_SUPPORTED) /* Swap packing order of pixels in bytes. */ -extern PNG_EXPORT(void,png_set_packswap) PNGARG((png_structp png_ptr)); +PNG_EXPORT(43, void, png_set_packswap, (png_structp png_ptr)); #endif #if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) /* Converts files to legal bit depths. */ -extern PNG_EXPORT(void,png_set_shift) PNGARG((png_structp png_ptr, - png_color_8p true_bits)); +PNG_EXPORT(44, void, png_set_shift, (png_structp png_ptr, png_const_color_8p + true_bits)); #endif #if defined(PNG_READ_INTERLACING_SUPPORTED) || \ defined(PNG_WRITE_INTERLACING_SUPPORTED) -/* Have the code handle the interlacing. Returns the number of passes. */ -extern PNG_EXPORT(int,png_set_interlace_handling) PNGARG((png_structp png_ptr)); +/* Have the code handle the interlacing. Returns the number of passes. + * MUST be called before png_read_update_info or png_start_read_image, + * otherwise it will not have the desired effect. Note that it is still + * necessary to call png_read_row or png_read_rows png_get_image_height + * times for each pass. +*/ +PNG_EXPORT(45, int, png_set_interlace_handling, (png_structp png_ptr)); #endif #if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) /* Invert monochrome files */ -extern PNG_EXPORT(void,png_set_invert_mono) PNGARG((png_structp png_ptr)); +PNG_EXPORT(46, void, png_set_invert_mono, (png_structp png_ptr)); #endif -#if defined(PNG_READ_BACKGROUND_SUPPORTED) -/* Handle alpha and tRNS by replacing with a background color. */ -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_background) PNGARG((png_structp png_ptr, - png_color_16p background_color, int background_gamma_code, - int need_expand, double background_gamma)); +#ifdef PNG_READ_BACKGROUND_SUPPORTED +/* Handle alpha and tRNS by replacing with a background color. Prior to + * libpng-1.5.4 this API must not be called before the PNG file header has been + * read. Doing so will result in unexpected behavior and possible warnings or + * errors if the PNG file contains a bKGD chunk. + */ +PNG_FP_EXPORT(47, void, png_set_background, (png_structp png_ptr, + png_const_color_16p background_color, int background_gamma_code, + int need_expand, double background_gamma)); +PNG_FIXED_EXPORT(215, void, png_set_background_fixed, (png_structp png_ptr, + png_const_color_16p background_color, int background_gamma_code, + int need_expand, png_fixed_point background_gamma)); #endif -#define PNG_BACKGROUND_GAMMA_UNKNOWN 0 -#define PNG_BACKGROUND_GAMMA_SCREEN 1 -#define PNG_BACKGROUND_GAMMA_FILE 2 -#define PNG_BACKGROUND_GAMMA_UNIQUE 3 +#ifdef PNG_READ_BACKGROUND_SUPPORTED +# define PNG_BACKGROUND_GAMMA_UNKNOWN 0 +# define PNG_BACKGROUND_GAMMA_SCREEN 1 +# define PNG_BACKGROUND_GAMMA_FILE 2 +# define PNG_BACKGROUND_GAMMA_UNIQUE 3 #endif -#if defined(PNG_READ_16_TO_8_SUPPORTED) -/* strip the second byte of information from a 16-bit depth file. */ -extern PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr)); +#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED +/* Scale a 16-bit depth file down to 8-bit, accurately. */ +PNG_EXPORT(229, void, png_set_scale_16, (png_structp png_ptr)); #endif -#if defined(PNG_READ_DITHER_SUPPORTED) -/* Turn on dithering, and reduce the palette to the number of colors available. */ -extern PNG_EXPORT(void,png_set_dither) PNGARG((png_structp png_ptr, - png_colorp palette, int num_palette, int maximum_colors, - png_uint_16p histogram, int full_dither)); +#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED +#define PNG_READ_16_TO_8 SUPPORTED /* Name prior to 1.5.4 */ +/* Strip the second byte of information from a 16-bit depth file. */ +PNG_EXPORT(48, void, png_set_strip_16, (png_structp png_ptr)); #endif -#if defined(PNG_READ_GAMMA_SUPPORTED) -/* Handle gamma correction. Screen_gamma=(display_exponent) */ -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr, - double screen_gamma, double default_file_gamma)); -#endif +#ifdef PNG_READ_QUANTIZE_SUPPORTED +/* Turn on quantizing, and reduce the palette to the number of colors + * available. + */ +PNG_EXPORT(49, void, png_set_quantize, + (png_structp png_ptr, png_colorp palette, + int num_palette, int maximum_colors, png_const_uint_16p histogram, + int full_quantize)); #endif -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ - defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) -/* Permit or disallow empty PLTE (0: not permitted, 1: permitted) */ -/* Deprecated and will be removed. Use png_permit_mng_features() instead. */ -extern PNG_EXPORT(void,png_permit_empty_plte) PNGARG((png_structp png_ptr, - int empty_plte_permitted)); -#endif +#ifdef PNG_READ_GAMMA_SUPPORTED +/* The threshold on gamma processing is configurable but hard-wired into the + * library. The following is the floating point variant. + */ +#define PNG_GAMMA_THRESHOLD (PNG_GAMMA_THRESHOLD_FIXED*.00001) + +/* Handle gamma correction. Screen_gamma=(display_exponent). + * NOTE: this API simply sets the screen and file gamma values. It will + * therefore override the value for gamma in a PNG file if it is called after + * the file header has been read - use with care - call before reading the PNG + * file for best results! + * + * These routines accept the same gamma values as png_set_alpha_mode (described + * above). The PNG_GAMMA_ defines and PNG_DEFAULT_sRGB can be passed to either + * API (floating point or fixed.) Notice, however, that the 'file_gamma' value + * is the inverse of a 'screen gamma' value. + */ +PNG_FP_EXPORT(50, void, png_set_gamma, + (png_structp png_ptr, double screen_gamma, + double override_file_gamma)); +PNG_FIXED_EXPORT(208, void, png_set_gamma_fixed, (png_structp png_ptr, + png_fixed_point screen_gamma, png_fixed_point override_file_gamma)); #endif -#if defined(PNG_WRITE_FLUSH_SUPPORTED) +#ifdef PNG_WRITE_FLUSH_SUPPORTED /* Set how many lines between output flushes - 0 for no flushing */ -extern PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows)); +PNG_EXPORT(51, void, png_set_flush, (png_structp png_ptr, int nrows)); /* Flush the current PNG output buffer */ -extern PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr)); +PNG_EXPORT(52, void, png_write_flush, (png_structp png_ptr)); #endif -/* optional update palette with requested transformations */ -extern PNG_EXPORT(void,png_start_read_image) PNGARG((png_structp png_ptr)); +/* Optional update palette with requested transformations */ +PNG_EXPORT(53, void, png_start_read_image, (png_structp png_ptr)); -/* optional call to update the users info structure */ -extern PNG_EXPORT(void,png_read_update_info) PNGARG((png_structp png_ptr, - png_infop info_ptr)); +/* Optional call to update the users info structure */ +PNG_EXPORT(54, void, png_read_update_info, + (png_structp png_ptr, png_infop info_ptr)); -#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED -/* read one or more rows of image data. */ -extern PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr, - png_bytepp row, png_bytepp display_row, png_uint_32 num_rows)); +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read one or more rows of image data. */ +PNG_EXPORT(55, void, png_read_rows, (png_structp png_ptr, png_bytepp row, + png_bytepp display_row, png_uint_32 num_rows)); #endif -#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED -/* read a row of data. */ -extern PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr, - png_bytep row, - png_bytep display_row)); +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read a row of data. */ +PNG_EXPORT(56, void, png_read_row, (png_structp png_ptr, png_bytep row, + png_bytep display_row)); #endif -#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED -/* read the whole image into memory at once. */ -extern PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr, - png_bytepp image)); +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read the whole image into memory at once. */ +PNG_EXPORT(57, void, png_read_image, (png_structp png_ptr, png_bytepp image)); #endif -/* write a row of image data */ -extern PNG_EXPORT(void,png_write_row) PNGARG((png_structp png_ptr, - png_bytep row)); +/* Write a row of image data */ +PNG_EXPORT(58, void, png_write_row, + (png_structp png_ptr, png_const_bytep row)); -/* write a few rows of image data */ -extern PNG_EXPORT(void,png_write_rows) PNGARG((png_structp png_ptr, - png_bytepp row, png_uint_32 num_rows)); +/* Write a few rows of image data: (*row) is not written; however, the type + * is declared as writeable to maintain compatibility with previous versions + * of libpng and to allow the 'display_row' array from read_rows to be passed + * unchanged to write_rows. + */ +PNG_EXPORT(59, void, png_write_rows, (png_structp png_ptr, png_bytepp row, + png_uint_32 num_rows)); -/* write the image data */ -extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr, - png_bytepp image)); +/* Write the image data */ +PNG_EXPORT(60, void, png_write_image, + (png_structp png_ptr, png_bytepp image)); -/* writes the end of the PNG file. */ -extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr, - png_infop info_ptr)); +/* Write the end of the PNG file. */ +PNG_EXPORT(61, void, png_write_end, + (png_structp png_ptr, png_infop info_ptr)); -#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED -/* read the end of the PNG file. */ -extern PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr, - png_infop info_ptr)); +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read the end of the PNG file. */ +PNG_EXPORT(62, void, png_read_end, (png_structp png_ptr, png_infop info_ptr)); #endif -/* free any memory associated with the png_info_struct */ -extern PNG_EXPORT(void,png_destroy_info_struct) PNGARG((png_structp png_ptr, - png_infopp info_ptr_ptr)); +/* Free any memory associated with the png_info_struct */ +PNG_EXPORT(63, void, png_destroy_info_struct, (png_structp png_ptr, + png_infopp info_ptr_ptr)); -/* free any memory associated with the png_struct and the png_info_structs */ -extern PNG_EXPORT(void,png_destroy_read_struct) PNGARG((png_structpp - png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr)); +/* Free any memory associated with the png_struct and the png_info_structs */ +PNG_EXPORT(64, void, png_destroy_read_struct, (png_structpp png_ptr_ptr, + png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr)); -/* free all memory used by the read (old method - NOT DLL EXPORTED) */ -extern void png_read_destroy PNGARG((png_structp png_ptr, png_infop info_ptr, - png_infop end_info_ptr)); +/* Free any memory associated with the png_struct and the png_info_structs */ +PNG_EXPORT(65, void, png_destroy_write_struct, (png_structpp png_ptr_ptr, + png_infopp info_ptr_ptr)); -/* free any memory associated with the png_struct and the png_info_structs */ -extern PNG_EXPORT(void,png_destroy_write_struct) - PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)); +/* Set the libpng method of handling chunk CRC errors */ +PNG_EXPORT(66, void, png_set_crc_action, + (png_structp png_ptr, int crit_action, int ancil_action)); -/* free any memory used in png_ptr struct (old method - NOT DLL EXPORTED) */ -extern void png_write_destroy PNGARG((png_structp png_ptr)); - -/* set the libpng method of handling chunk CRC errors */ -extern PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr, - int crit_action, int ancil_action)); - -/* Values for png_set_crc_action() to say how to handle CRC errors in +/* Values for png_set_crc_action() say how to handle CRC errors in * ancillary and critical chunks, and whether to use the data contained * therein. Note that it is impossible to "discard" data in a critical * chunk. For versions prior to 0.90, the action was always error/quit, @@ -1822,11 +1601,11 @@ extern PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr, * header file (zlib.h) for an explination of the compression functions. */ -/* set the filtering method(s) used by libpng. Currently, the only valid +/* Set the filtering method(s) used by libpng. Currently, the only valid * value for "method" is 0. */ -extern PNG_EXPORT(void,png_set_filter) PNGARG((png_structp png_ptr, int method, - int filters)); +PNG_EXPORT(67, void, png_set_filter, + (png_structp png_ptr, int method, int filters)); /* Flags for png_set_filter() to say which filters to use. The flags * are chosen so that they don't conflict with real filter types @@ -1852,7 +1631,7 @@ extern PNG_EXPORT(void,png_set_filter) PNGARG((png_structp png_ptr, int method, #define PNG_FILTER_VALUE_PAETH 4 #define PNG_FILTER_VALUE_LAST 5 -#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* EXPERIMENTAL */ +#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* EXPERIMENTAL */ /* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_ * defines, either the default (minimum-sum-of-absolute-differences), or * the experimental method (weighted-minimum-sum-of-absolute-differences). @@ -1881,11 +1660,13 @@ extern PNG_EXPORT(void,png_set_filter) PNGARG((png_structp png_ptr, int method, * the weights and costs are set to 1.0, this degenerates the WEIGHTED method * to the UNWEIGHTED method, but with added encoding time/computation. */ -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr, - int heuristic_method, int num_weights, png_doublep filter_weights, - png_doublep filter_costs)); -#endif +PNG_FP_EXPORT(68, void, png_set_filter_heuristics, (png_structp png_ptr, + int heuristic_method, int num_weights, png_const_doublep filter_weights, + png_const_doublep filter_costs)); +PNG_FIXED_EXPORT(209, void, png_set_filter_heuristics_fixed, + (png_structp png_ptr, + int heuristic_method, int num_weights, png_const_fixed_point_p + filter_weights, png_const_fixed_point_p filter_costs)); #endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */ /* Heuristic used for row filter selection. These defines should NOT be @@ -1896,6 +1677,7 @@ extern PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr, #define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */ #define PNG_FILTER_HEURISTIC_LAST 3 /* Not a valid value */ +#ifdef PNG_WRITE_SUPPORTED /* Set the library compression level. Currently, valid values range from * 0 - 9, corresponding directly to the zlib compression levels 0 - 9 * (0 - no compression, 9 - "maximal" compression). Note that tests have @@ -1903,33 +1685,58 @@ extern PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr, * for PNG images, and do considerably fewer caclulations. In the future, * these values may not correspond directly to the zlib compression levels. */ -extern PNG_EXPORT(void,png_set_compression_level) PNGARG((png_structp png_ptr, - int level)); +PNG_EXPORT(69, void, png_set_compression_level, + (png_structp png_ptr, int level)); -extern PNG_EXPORT(void,png_set_compression_mem_level) - PNGARG((png_structp png_ptr, int mem_level)); +PNG_EXPORT(70, void, png_set_compression_mem_level, (png_structp png_ptr, + int mem_level)); -extern PNG_EXPORT(void,png_set_compression_strategy) - PNGARG((png_structp png_ptr, int strategy)); +PNG_EXPORT(71, void, png_set_compression_strategy, (png_structp png_ptr, + int strategy)); -extern PNG_EXPORT(void,png_set_compression_window_bits) - PNGARG((png_structp png_ptr, int window_bits)); +/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a + * smaller value of window_bits if it can do so safely. + */ +PNG_EXPORT(72, void, png_set_compression_window_bits, (png_structp png_ptr, + int window_bits)); -extern PNG_EXPORT(void,png_set_compression_method) PNGARG((png_structp png_ptr, - int method)); +PNG_EXPORT(73, void, png_set_compression_method, (png_structp png_ptr, + int method)); +#endif + +#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED +/* Also set zlib parameters for compressing non-IDAT chunks */ +PNG_EXPORT(222, void, png_set_text_compression_level, + (png_structp png_ptr, int level)); + +PNG_EXPORT(223, void, png_set_text_compression_mem_level, (png_structp png_ptr, + int mem_level)); + +PNG_EXPORT(224, void, png_set_text_compression_strategy, (png_structp png_ptr, + int strategy)); + +/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a + * smaller value of window_bits if it can do so safely. + */ +PNG_EXPORT(225, void, png_set_text_compression_window_bits, (png_structp + png_ptr, int window_bits)); + +PNG_EXPORT(226, void, png_set_text_compression_method, (png_structp png_ptr, + int method)); +#endif /* PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED */ /* These next functions are called for input/output, memory, and error * handling. They are in the file pngrio.c, pngwio.c, and pngerror.c, * and call standard C I/O routines such as fread(), fwrite(), and * fprintf(). These functions can be made to use other I/O routines * at run time for those applications that need to handle I/O in a - * different manner by calling png_set_???_fn(). See libpng.txt for + * different manner by calling png_set_???_fn(). See libpng-manual.txt for * more information. */ -#if !defined(PNG_NO_STDIO) +#ifdef PNG_STDIO_SUPPORTED /* Initialize the input/output for the PNG file to the default functions. */ -extern PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr, png_FILE_p fp)); +PNG_EXPORT(74, void, png_init_io, (png_structp png_ptr, png_FILE_p fp)); #endif /* Replace the (error and abort), and warning functions with user @@ -1940,128 +1747,157 @@ extern PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr, png_FILE_p fp)) * default function will be used. */ -extern PNG_EXPORT(void,png_set_error_fn) PNGARG((png_structp png_ptr, - png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn)); +PNG_EXPORT(75, void, png_set_error_fn, + (png_structp png_ptr, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warning_fn)); /* Return the user pointer associated with the error functions */ -extern PNG_EXPORT(png_voidp,png_get_error_ptr) PNGARG((png_structp png_ptr)); +PNG_EXPORT(76, png_voidp, png_get_error_ptr, (png_const_structp png_ptr)); /* Replace the default data output functions with a user supplied one(s). * If buffered output is not used, then output_flush_fn can be set to NULL. * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time * output_flush_fn will be ignored (and thus can be NULL). + * It is probably a mistake to use NULL for output_flush_fn if + * write_data_fn is not also NULL unless you have built libpng with + * PNG_WRITE_FLUSH_SUPPORTED undefined, because in this case libpng's + * default flush function, which uses the standard *FILE structure, will + * be used. */ -extern PNG_EXPORT(void,png_set_write_fn) PNGARG((png_structp png_ptr, - png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)); +PNG_EXPORT(77, void, png_set_write_fn, (png_structp png_ptr, png_voidp io_ptr, + png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)); /* Replace the default data input function with a user supplied one. */ -extern PNG_EXPORT(void,png_set_read_fn) PNGARG((png_structp png_ptr, - png_voidp io_ptr, png_rw_ptr read_data_fn)); +PNG_EXPORT(78, void, png_set_read_fn, (png_structp png_ptr, png_voidp io_ptr, + png_rw_ptr read_data_fn)); /* Return the user pointer associated with the I/O functions */ -extern PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr)); +PNG_EXPORT(79, png_voidp, png_get_io_ptr, (png_structp png_ptr)); -extern PNG_EXPORT(void,png_set_read_status_fn) PNGARG((png_structp png_ptr, - png_read_status_ptr read_row_fn)); +PNG_EXPORT(80, void, png_set_read_status_fn, (png_structp png_ptr, + png_read_status_ptr read_row_fn)); -extern PNG_EXPORT(void,png_set_write_status_fn) PNGARG((png_structp png_ptr, - png_write_status_ptr write_row_fn)); +PNG_EXPORT(81, void, png_set_write_status_fn, (png_structp png_ptr, + png_write_status_ptr write_row_fn)); #ifdef PNG_USER_MEM_SUPPORTED /* Replace the default memory allocation functions with user supplied one(s). */ -extern PNG_EXPORT(void,png_set_mem_fn) PNGARG((png_structp png_ptr, - png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn)); +PNG_EXPORT(82, void, png_set_mem_fn, (png_structp png_ptr, png_voidp mem_ptr, + png_malloc_ptr malloc_fn, png_free_ptr free_fn)); /* Return the user pointer associated with the memory functions */ -extern PNG_EXPORT(png_voidp,png_get_mem_ptr) PNGARG((png_structp png_ptr)); +PNG_EXPORT(83, png_voidp, png_get_mem_ptr, (png_const_structp png_ptr)); #endif -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_LEGACY_SUPPORTED) -extern PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp - png_ptr, png_user_transform_ptr read_user_transform_fn)); +#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED +PNG_EXPORT(84, void, png_set_read_user_transform_fn, (png_structp png_ptr, + png_user_transform_ptr read_user_transform_fn)); #endif -#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_LEGACY_SUPPORTED) -extern PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp - png_ptr, png_user_transform_ptr write_user_transform_fn)); +#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED +PNG_EXPORT(85, void, png_set_write_user_transform_fn, (png_structp png_ptr, + png_user_transform_ptr write_user_transform_fn)); #endif -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_LEGACY_SUPPORTED) -extern PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp - png_ptr, png_voidp user_transform_ptr, int user_transform_depth, - int user_transform_channels)); +#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED +PNG_EXPORT(86, void, png_set_user_transform_info, (png_structp png_ptr, + png_voidp user_transform_ptr, int user_transform_depth, + int user_transform_channels)); /* Return the user pointer associated with the user transform functions */ -extern PNG_EXPORT(png_voidp,png_get_user_transform_ptr) - PNGARG((png_structp png_ptr)); +PNG_EXPORT(87, png_voidp, png_get_user_transform_ptr, + (png_const_structp png_ptr)); +#endif + +#ifdef PNG_USER_TRANSFORM_INFO_SUPPORTED +/* Return information about the row currently being processed. Note that these + * APIs do not fail but will return unexpected results if called outside a user + * transform callback. Also note that when transforming an interlaced image the + * row number is the row number within the sub-image of the interlace pass, so + * the value will increase to the height of the sub-image (not the full image) + * then reset to 0 for the next pass. + * + * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to + * find the output pixel (x,y) given an interlaced sub-image pixel + * (row,col,pass). (See below for these macros.) + */ +PNG_EXPORT(217, png_uint_32, png_get_current_row_number, (png_const_structp)); +PNG_EXPORT(218, png_byte, png_get_current_pass_number, (png_const_structp)); #endif #ifdef PNG_USER_CHUNKS_SUPPORTED -extern PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr, - png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); -extern PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp - png_ptr)); +PNG_EXPORT(88, void, png_set_read_user_chunk_fn, (png_structp png_ptr, + png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); +PNG_EXPORT(89, png_voidp, png_get_user_chunk_ptr, (png_const_structp png_ptr)); #endif #ifdef PNG_PROGRESSIVE_READ_SUPPORTED /* Sets the function callbacks for the push reader, and a pointer to a * user-defined structure available to the callback functions. */ -extern PNG_EXPORT(void,png_set_progressive_read_fn) PNGARG((png_structp png_ptr, - png_voidp progressive_ptr, - png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn, - png_progressive_end_ptr end_fn)); +PNG_EXPORT(90, void, png_set_progressive_read_fn, (png_structp png_ptr, + png_voidp progressive_ptr, png_progressive_info_ptr info_fn, + png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn)); -/* returns the user pointer associated with the push read functions */ -extern PNG_EXPORT(png_voidp,png_get_progressive_ptr) - PNGARG((png_structp png_ptr)); +/* Returns the user pointer associated with the push read functions */ +PNG_EXPORT(91, png_voidp, png_get_progressive_ptr, (png_const_structp png_ptr)); -/* function to be called when data becomes available */ -extern PNG_EXPORT(void,png_process_data) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_bytep buffer, png_size_t buffer_size)); +/* Function to be called when data becomes available */ +PNG_EXPORT(92, void, png_process_data, + (png_structp png_ptr, png_infop info_ptr, + png_bytep buffer, png_size_t buffer_size)); -/* function that combines rows. Not very much different than the - * png_combine_row() call. Is this even used????? +/* A function which may be called *only* within png_process_data to stop the + * processing of any more data. The function returns the number of bytes + * remaining, excluding any that libpng has cached internally. A subsequent + * call to png_process_data must supply these bytes again. If the argument + * 'save' is set to true the routine will first save all the pending data and + * will always return 0. */ -extern PNG_EXPORT(void,png_progressive_combine_row) PNGARG((png_structp png_ptr, - png_bytep old_row, png_bytep new_row)); +PNG_EXPORT(219, png_size_t, png_process_data_pause, (png_structp, int save)); + +/* A function which may be called *only* outside (after) a call to + * png_process_data. It returns the number of bytes of data to skip in the + * input. Normally it will return 0, but if it returns a non-zero value the + * application must skip than number of bytes of input data and pass the + * following data to the next call to png_process_data. + */ +PNG_EXPORT(220, png_uint_32, png_process_data_skip, (png_structp)); + +#ifdef PNG_READ_INTERLACING_SUPPORTED +/* Function that combines rows. 'new_row' is a flag that should come from + * the callback and be non-NULL if anything needs to be done; the library + * stores its own version of the new data internally and ignores the passed + * in value. + */ +PNG_EXPORT(93, void, png_progressive_combine_row, (png_structp png_ptr, + png_bytep old_row, png_const_bytep new_row)); +#endif /* PNG_READ_INTERLACING_SUPPORTED */ #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ -extern PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr, - png_uint_32 size)); +PNG_EXPORTA(94, png_voidp, png_malloc, + (png_structp png_ptr, png_alloc_size_t size), + PNG_ALLOCATED); +/* Added at libpng version 1.4.0 */ +PNG_EXPORTA(95, png_voidp, png_calloc, + (png_structp png_ptr, png_alloc_size_t size), + PNG_ALLOCATED); -#if defined(PNG_1_0_X) -# define png_malloc_warn png_malloc -#else /* Added at libpng version 1.2.4 */ -extern PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr, - png_uint_32 size)); -#endif +PNG_EXPORTA(96, png_voidp, png_malloc_warn, (png_structp png_ptr, + png_alloc_size_t size), PNG_ALLOCATED); -/* frees a pointer allocated by png_malloc() */ -extern PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr)); - -#if defined(PNG_1_0_X) -/* Function to allocate memory for zlib. */ -extern PNG_EXPORT(voidpf,png_zalloc) PNGARG((voidpf png_ptr, uInt items, - uInt size)); - -/* Function to free memory for zlib */ -extern PNG_EXPORT(void,png_zfree) PNGARG((voidpf png_ptr, voidpf ptr)); -#endif +/* Frees a pointer allocated by png_malloc() */ +PNG_EXPORT(97, void, png_free, (png_structp png_ptr, png_voidp ptr)); /* Free data that was allocated internally */ -extern PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 free_me, int num)); -#ifdef PNG_FREE_ME_SUPPORTED +PNG_EXPORT(98, void, png_free_data, + (png_structp png_ptr, png_infop info_ptr, png_uint_32 free_me, int num)); + /* Reassign responsibility for freeing existing data, whether allocated * by libpng or by the application */ -extern PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr, - png_infop info_ptr, int freer, png_uint_32 mask)); -#endif -/* assignments for png_data_freer */ +PNG_EXPORT(99, void, png_data_freer, + (png_structp png_ptr, png_infop info_ptr, int freer, png_uint_32 mask)); + +/* Assignments for png_data_freer */ #define PNG_DESTROY_WILL_FREE_DATA 1 #define PNG_SET_WILL_FREE_DATA 1 #define PNG_USER_WILL_FREE_DATA 2 @@ -2081,47 +1917,59 @@ extern PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr, #define PNG_FREE_MUL 0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */ #ifdef PNG_USER_MEM_SUPPORTED -extern PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr, - png_uint_32 size)); -extern PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr, - png_voidp ptr)); +PNG_EXPORTA(100, png_voidp, png_malloc_default, (png_structp png_ptr, + png_alloc_size_t size), PNG_ALLOCATED); +PNG_EXPORT(101, void, png_free_default, (png_structp png_ptr, png_voidp ptr)); #endif -extern PNG_EXPORT(png_voidp,png_memcpy_check) PNGARG((png_structp png_ptr, - png_voidp s1, png_voidp s2, png_uint_32 size)); - -extern PNG_EXPORT(png_voidp,png_memset_check) PNGARG((png_structp png_ptr, - png_voidp s1, int value, png_uint_32 size)); - -#if defined(USE_FAR_KEYWORD) /* memory model conversion function */ -extern void *png_far_to_near PNGARG((png_structp png_ptr,png_voidp ptr, - int check)); -#endif /* USE_FAR_KEYWORD */ - -#ifndef PNG_NO_ERROR_TEXT +#ifdef PNG_ERROR_TEXT_SUPPORTED /* Fatal error in PNG image of libpng - can't continue */ -extern PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr, - png_const_charp error_message)); +PNG_EXPORTA(102, void, png_error, + (png_structp png_ptr, png_const_charp error_message), + PNG_NORETURN); /* The same, but the chunk name is prepended to the error string. */ -extern PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr, - png_const_charp error_message)); +PNG_EXPORTA(103, void, png_chunk_error, (png_structp png_ptr, + png_const_charp error_message), PNG_NORETURN); + #else /* Fatal error in PNG image of libpng - can't continue */ -extern PNG_EXPORT(void,png_err) PNGARG((png_structp png_ptr)); +PNG_EXPORTA(104, void, png_err, (png_structp png_ptr), PNG_NORETURN); #endif -#ifndef PNG_NO_WARNINGS +#ifdef PNG_WARNINGS_SUPPORTED /* Non-fatal error in libpng. Can continue, but may have a problem. */ -extern PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr, - png_const_charp warning_message)); +PNG_EXPORT(105, void, png_warning, (png_structp png_ptr, + png_const_charp warning_message)); -#ifdef PNG_READ_SUPPORTED /* Non-fatal error in libpng, chunk name is prepended to message. */ -extern PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr, - png_const_charp warning_message)); -#endif /* PNG_READ_SUPPORTED */ -#endif /* PNG_NO_WARNINGS */ +PNG_EXPORT(106, void, png_chunk_warning, (png_structp png_ptr, + png_const_charp warning_message)); +#endif + +#ifdef PNG_BENIGN_ERRORS_SUPPORTED +/* Benign error in libpng. Can continue, but may have a problem. + * User can choose whether to handle as a fatal error or as a warning. */ +# undef png_benign_error +PNG_EXPORT(107, void, png_benign_error, (png_structp png_ptr, + png_const_charp warning_message)); + +/* Same, chunk name is prepended to message. */ +# undef png_chunk_benign_error +PNG_EXPORT(108, void, png_chunk_benign_error, (png_structp png_ptr, + png_const_charp warning_message)); + +PNG_EXPORT(109, void, png_set_benign_errors, + (png_structp png_ptr, int allowed)); +#else +# ifdef PNG_ALLOW_BENIGN_ERRORS +# define png_benign_error png_warning +# define png_chunk_benign_error png_chunk_warning +# else +# define png_benign_error png_error +# define png_chunk_benign_error png_chunk_error +# endif +#endif /* The png_set_ functions are for storing values in the png_info_struct. * Similarly, the png_get_ calls are used to read values from the @@ -2136,421 +1984,416 @@ extern PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr, * png_info_struct. */ /* Returns "flag" if chunk data is valid in info_ptr. */ -extern PNG_EXPORT(png_uint_32,png_get_valid) PNGARG((png_structp png_ptr, -png_infop info_ptr, png_uint_32 flag)); +PNG_EXPORT(110, png_uint_32, png_get_valid, + (png_const_structp png_ptr, png_const_infop info_ptr, + png_uint_32 flag)); /* Returns number of bytes needed to hold a transformed row. */ -extern PNG_EXPORT(png_uint_32,png_get_rowbytes) PNGARG((png_structp png_ptr, -png_infop info_ptr)); +PNG_EXPORT(111, png_size_t, png_get_rowbytes, (png_const_structp png_ptr, + png_const_infop info_ptr)); -#if defined(PNG_INFO_IMAGE_SUPPORTED) +#ifdef PNG_INFO_IMAGE_SUPPORTED /* Returns row_pointers, which is an array of pointers to scanlines that was -returned from png_read_png(). */ -extern PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr, -png_infop info_ptr)); + * returned from png_read_png(). + */ +PNG_EXPORT(112, png_bytepp, png_get_rows, + (png_const_structp png_ptr, png_const_infop info_ptr)); /* Set row_pointers, which is an array of pointers to scanlines for use -by png_write_png(). */ -extern PNG_EXPORT(void,png_set_rows) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_bytepp row_pointers)); + * by png_write_png(). + */ +PNG_EXPORT(113, void, png_set_rows, (png_structp png_ptr, + png_infop info_ptr, png_bytepp row_pointers)); #endif /* Returns number of color channels in image. */ -extern PNG_EXPORT(png_byte,png_get_channels) PNGARG((png_structp png_ptr, -png_infop info_ptr)); +PNG_EXPORT(114, png_byte, png_get_channels, + (png_const_structp png_ptr, png_const_infop info_ptr)); #ifdef PNG_EASY_ACCESS_SUPPORTED /* Returns image width in pixels. */ -extern PNG_EXPORT(png_uint_32, png_get_image_width) PNGARG((png_structp -png_ptr, png_infop info_ptr)); +PNG_EXPORT(115, png_uint_32, png_get_image_width, (png_const_structp png_ptr, + png_const_infop info_ptr)); /* Returns image height in pixels. */ -extern PNG_EXPORT(png_uint_32, png_get_image_height) PNGARG((png_structp -png_ptr, png_infop info_ptr)); +PNG_EXPORT(116, png_uint_32, png_get_image_height, (png_const_structp png_ptr, + png_const_infop info_ptr)); /* Returns image bit_depth. */ -extern PNG_EXPORT(png_byte, png_get_bit_depth) PNGARG((png_structp -png_ptr, png_infop info_ptr)); +PNG_EXPORT(117, png_byte, png_get_bit_depth, + (png_const_structp png_ptr, png_const_infop info_ptr)); /* Returns image color_type. */ -extern PNG_EXPORT(png_byte, png_get_color_type) PNGARG((png_structp -png_ptr, png_infop info_ptr)); +PNG_EXPORT(118, png_byte, png_get_color_type, (png_const_structp png_ptr, + png_const_infop info_ptr)); /* Returns image filter_type. */ -extern PNG_EXPORT(png_byte, png_get_filter_type) PNGARG((png_structp -png_ptr, png_infop info_ptr)); +PNG_EXPORT(119, png_byte, png_get_filter_type, (png_const_structp png_ptr, + png_const_infop info_ptr)); /* Returns image interlace_type. */ -extern PNG_EXPORT(png_byte, png_get_interlace_type) PNGARG((png_structp -png_ptr, png_infop info_ptr)); +PNG_EXPORT(120, png_byte, png_get_interlace_type, (png_const_structp png_ptr, + png_const_infop info_ptr)); /* Returns image compression_type. */ -extern PNG_EXPORT(png_byte, png_get_compression_type) PNGARG((png_structp -png_ptr, png_infop info_ptr)); +PNG_EXPORT(121, png_byte, png_get_compression_type, (png_const_structp png_ptr, + png_const_infop info_ptr)); /* Returns image resolution in pixels per meter, from pHYs chunk data. */ -extern PNG_EXPORT(png_uint_32, png_get_pixels_per_meter) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -extern PNG_EXPORT(png_uint_32, png_get_x_pixels_per_meter) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -extern PNG_EXPORT(png_uint_32, png_get_y_pixels_per_meter) PNGARG((png_structp -png_ptr, png_infop info_ptr)); +PNG_EXPORT(122, png_uint_32, png_get_pixels_per_meter, + (png_const_structp png_ptr, png_const_infop info_ptr)); +PNG_EXPORT(123, png_uint_32, png_get_x_pixels_per_meter, + (png_const_structp png_ptr, png_const_infop info_ptr)); +PNG_EXPORT(124, png_uint_32, png_get_y_pixels_per_meter, + (png_const_structp png_ptr, png_const_infop info_ptr)); /* Returns pixel aspect ratio, computed from pHYs chunk data. */ -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(float, png_get_pixel_aspect_ratio) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -#endif +PNG_FP_EXPORT(125, float, png_get_pixel_aspect_ratio, + (png_const_structp png_ptr, png_const_infop info_ptr)); +PNG_FIXED_EXPORT(210, png_fixed_point, png_get_pixel_aspect_ratio_fixed, + (png_const_structp png_ptr, png_const_infop info_ptr)); /* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ -extern PNG_EXPORT(png_int_32, png_get_x_offset_pixels) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -extern PNG_EXPORT(png_int_32, png_get_y_offset_pixels) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -extern PNG_EXPORT(png_int_32, png_get_x_offset_microns) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -extern PNG_EXPORT(png_int_32, png_get_y_offset_microns) PNGARG((png_structp -png_ptr, png_infop info_ptr)); +PNG_EXPORT(126, png_int_32, png_get_x_offset_pixels, + (png_const_structp png_ptr, png_const_infop info_ptr)); +PNG_EXPORT(127, png_int_32, png_get_y_offset_pixels, + (png_const_structp png_ptr, png_const_infop info_ptr)); +PNG_EXPORT(128, png_int_32, png_get_x_offset_microns, + (png_const_structp png_ptr, png_const_infop info_ptr)); +PNG_EXPORT(129, png_int_32, png_get_y_offset_microns, + (png_const_structp png_ptr, png_const_infop info_ptr)); #endif /* PNG_EASY_ACCESS_SUPPORTED */ /* Returns pointer to signature string read from PNG header */ -extern PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr, -png_infop info_ptr)); +PNG_EXPORT(130, png_const_bytep, png_get_signature, + (png_const_structp png_ptr, png_infop info_ptr)); -#if defined(PNG_bKGD_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_color_16p *background)); +#ifdef PNG_bKGD_SUPPORTED +PNG_EXPORT(131, png_uint_32, png_get_bKGD, + (png_const_structp png_ptr, png_infop info_ptr, + png_color_16p *background)); #endif -#if defined(PNG_bKGD_SUPPORTED) -extern PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_color_16p background)); +#ifdef PNG_bKGD_SUPPORTED +PNG_EXPORT(132, void, png_set_bKGD, (png_structp png_ptr, png_infop info_ptr, + png_const_color_16p background)); #endif -#if defined(PNG_cHRM_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr, - png_infop info_ptr, double *white_x, double *white_y, double *red_x, - double *red_y, double *green_x, double *green_y, double *blue_x, - double *blue_y)); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_cHRM_fixed) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_fixed_point *int_white_x, png_fixed_point - *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y, - png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point - *int_blue_x, png_fixed_point *int_blue_y)); +#ifdef PNG_cHRM_SUPPORTED +PNG_FP_EXPORT(133, png_uint_32, png_get_cHRM, (png_const_structp png_ptr, + png_const_infop info_ptr, double *white_x, double *white_y, double *red_x, + double *red_y, double *green_x, double *green_y, double *blue_x, + double *blue_y)); +PNG_FP_EXPORT(230, png_uint_32, png_get_cHRM_XYZ, (png_structp png_ptr, + png_const_infop info_ptr, double *red_X, double *red_Y, double *red_Z, + double *green_X, double *green_Y, double *green_Z, double *blue_X, + double *blue_Y, double *blue_Z)); +#ifdef PNG_FIXED_POINT_SUPPORTED /* Otherwise not implemented */ +PNG_FIXED_EXPORT(134, png_uint_32, png_get_cHRM_fixed, + (png_const_structp png_ptr, + png_const_infop info_ptr, png_fixed_point *int_white_x, + png_fixed_point *int_white_y, png_fixed_point *int_red_x, + png_fixed_point *int_red_y, png_fixed_point *int_green_x, + png_fixed_point *int_green_y, png_fixed_point *int_blue_x, + png_fixed_point *int_blue_y)); #endif +PNG_FIXED_EXPORT(231, png_uint_32, png_get_cHRM_XYZ_fixed, + (png_structp png_ptr, png_const_infop info_ptr, + png_fixed_point *int_red_X, png_fixed_point *int_red_Y, + png_fixed_point *int_red_Z, png_fixed_point *int_green_X, + png_fixed_point *int_green_Y, png_fixed_point *int_green_Z, + png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y, + png_fixed_point *int_blue_Z)); #endif -#if defined(PNG_cHRM_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr, - png_infop info_ptr, double white_x, double white_y, double red_x, - double red_y, double green_x, double green_y, double blue_x, double blue_y)); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_cHRM_fixed) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y, - png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point - int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, - png_fixed_point int_blue_y)); -#endif +#ifdef PNG_cHRM_SUPPORTED +PNG_FP_EXPORT(135, void, png_set_cHRM, + (png_structp png_ptr, png_infop info_ptr, + double white_x, double white_y, double red_x, double red_y, double green_x, + double green_y, double blue_x, double blue_y)); +PNG_FP_EXPORT(232, void, png_set_cHRM_XYZ, (png_structp png_ptr, + png_infop info_ptr, double red_X, double red_Y, double red_Z, + double green_X, double green_Y, double green_Z, double blue_X, + double blue_Y, double blue_Z)); +PNG_FIXED_EXPORT(136, void, png_set_cHRM_fixed, (png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_white_x, + png_fixed_point int_white_y, png_fixed_point int_red_x, + png_fixed_point int_red_y, png_fixed_point int_green_x, + png_fixed_point int_green_y, png_fixed_point int_blue_x, + png_fixed_point int_blue_y)); +PNG_FIXED_EXPORT(233, void, png_set_cHRM_XYZ_fixed, (png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_red_X, png_fixed_point int_red_Y, + png_fixed_point int_red_Z, png_fixed_point int_green_X, + png_fixed_point int_green_Y, png_fixed_point int_green_Z, + png_fixed_point int_blue_X, png_fixed_point int_blue_Y, + png_fixed_point int_blue_Z)); #endif -#if defined(PNG_gAMA_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr, - png_infop info_ptr, double *file_gamma)); -#endif -extern PNG_EXPORT(png_uint_32,png_get_gAMA_fixed) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_fixed_point *int_file_gamma)); +#ifdef PNG_gAMA_SUPPORTED +PNG_FP_EXPORT(137, png_uint_32, png_get_gAMA, + (png_const_structp png_ptr, png_const_infop info_ptr, + double *file_gamma)); +PNG_FIXED_EXPORT(138, png_uint_32, png_get_gAMA_fixed, + (png_const_structp png_ptr, png_const_infop info_ptr, + png_fixed_point *int_file_gamma)); #endif -#if defined(PNG_gAMA_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr, - png_infop info_ptr, double file_gamma)); -#endif -extern PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_fixed_point int_file_gamma)); +#ifdef PNG_gAMA_SUPPORTED +PNG_FP_EXPORT(139, void, png_set_gAMA, (png_structp png_ptr, + png_infop info_ptr, double file_gamma)); +PNG_FIXED_EXPORT(140, void, png_set_gAMA_fixed, (png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_file_gamma)); #endif -#if defined(PNG_hIST_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_16p *hist)); +#ifdef PNG_hIST_SUPPORTED +PNG_EXPORT(141, png_uint_32, png_get_hIST, + (png_const_structp png_ptr, png_const_infop info_ptr, + png_uint_16p *hist)); #endif -#if defined(PNG_hIST_SUPPORTED) -extern PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_16p hist)); +#ifdef PNG_hIST_SUPPORTED +PNG_EXPORT(142, void, png_set_hIST, (png_structp png_ptr, + png_infop info_ptr, png_const_uint_16p hist)); #endif -extern PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 *width, png_uint_32 *height, - int *bit_depth, int *color_type, int *interlace_method, - int *compression_method, int *filter_method)); +PNG_EXPORT(143, png_uint_32, png_get_IHDR, + (png_structp png_ptr, png_infop info_ptr, + png_uint_32 *width, png_uint_32 *height, int *bit_depth, int *color_type, + int *interlace_method, int *compression_method, int *filter_method)); -extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, - int color_type, int interlace_method, int compression_method, - int filter_method)); +PNG_EXPORT(144, void, png_set_IHDR, + (png_structp png_ptr, png_infop info_ptr, + png_uint_32 width, png_uint_32 height, int bit_depth, int color_type, + int interlace_method, int compression_method, int filter_method)); -#if defined(PNG_oFFs_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, - int *unit_type)); +#ifdef PNG_oFFs_SUPPORTED +PNG_EXPORT(145, png_uint_32, png_get_oFFs, + (png_const_structp png_ptr, png_const_infop info_ptr, + png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type)); #endif -#if defined(PNG_oFFs_SUPPORTED) -extern PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y, - int unit_type)); +#ifdef PNG_oFFs_SUPPORTED +PNG_EXPORT(146, void, png_set_oFFs, + (png_structp png_ptr, png_infop info_ptr, + png_int_32 offset_x, png_int_32 offset_y, int unit_type)); #endif -#if defined(PNG_pCAL_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1, - int *type, int *nparams, png_charp *units, png_charpp *params)); +#ifdef PNG_pCAL_SUPPORTED +PNG_EXPORT(147, png_uint_32, png_get_pCAL, + (png_const_structp png_ptr, png_const_infop info_ptr, + png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, + int *nparams, + png_charp *units, png_charpp *params)); #endif -#if defined(PNG_pCAL_SUPPORTED) -extern PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1, - int type, int nparams, png_charp units, png_charpp params)); +#ifdef PNG_pCAL_SUPPORTED +PNG_EXPORT(148, void, png_set_pCAL, (png_structp png_ptr, + png_infop info_ptr, + png_const_charp purpose, png_int_32 X0, png_int_32 X1, int type, + int nparams, png_const_charp units, png_charpp params)); #endif -#if defined(PNG_pHYs_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); +#ifdef PNG_pHYs_SUPPORTED +PNG_EXPORT(149, png_uint_32, png_get_pHYs, + (png_const_structp png_ptr, png_const_infop info_ptr, + png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); #endif -#if defined(PNG_pHYs_SUPPORTED) -extern PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type)); +#ifdef PNG_pHYs_SUPPORTED +PNG_EXPORT(150, void, png_set_pHYs, + (png_structp png_ptr, png_infop info_ptr, + png_uint_32 res_x, png_uint_32 res_y, int unit_type)); #endif -extern PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_colorp *palette, int *num_palette)); +PNG_EXPORT(151, png_uint_32, png_get_PLTE, + (png_const_structp png_ptr, png_const_infop info_ptr, + png_colorp *palette, int *num_palette)); -extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_colorp palette, int num_palette)); +PNG_EXPORT(152, void, png_set_PLTE, + (png_structp png_ptr, png_infop info_ptr, + png_const_colorp palette, int num_palette)); -#if defined(PNG_sBIT_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_color_8p *sig_bit)); +#ifdef PNG_sBIT_SUPPORTED +PNG_EXPORT(153, png_uint_32, png_get_sBIT, + (png_const_structp png_ptr, png_infop info_ptr, + png_color_8p *sig_bit)); #endif -#if defined(PNG_sBIT_SUPPORTED) -extern PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_color_8p sig_bit)); +#ifdef PNG_sBIT_SUPPORTED +PNG_EXPORT(154, void, png_set_sBIT, + (png_structp png_ptr, png_infop info_ptr, png_const_color_8p sig_bit)); #endif -#if defined(PNG_sRGB_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr, - png_infop info_ptr, int *intent)); +#ifdef PNG_sRGB_SUPPORTED +PNG_EXPORT(155, png_uint_32, png_get_sRGB, (png_const_structp png_ptr, + png_const_infop info_ptr, int *file_srgb_intent)); #endif -#if defined(PNG_sRGB_SUPPORTED) -extern PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr, - png_infop info_ptr, int intent)); -extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr, - png_infop info_ptr, int intent)); +#ifdef PNG_sRGB_SUPPORTED +PNG_EXPORT(156, void, png_set_sRGB, + (png_structp png_ptr, png_infop info_ptr, int srgb_intent)); +PNG_EXPORT(157, void, png_set_sRGB_gAMA_and_cHRM, (png_structp png_ptr, + png_infop info_ptr, int srgb_intent)); #endif -#if defined(PNG_iCCP_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_charpp name, int *compression_type, - png_charpp profile, png_uint_32 *proflen)); - /* Note to maintainer: profile should be png_bytepp */ +#ifdef PNG_iCCP_SUPPORTED +PNG_EXPORT(158, png_uint_32, png_get_iCCP, + (png_const_structp png_ptr, png_const_infop info_ptr, + png_charpp name, int *compression_type, png_bytepp profile, + png_uint_32 *proflen)); #endif -#if defined(PNG_iCCP_SUPPORTED) -extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_charp name, int compression_type, - png_charp profile, png_uint_32 proflen)); - /* Note to maintainer: profile should be png_bytep */ +#ifdef PNG_iCCP_SUPPORTED +PNG_EXPORT(159, void, png_set_iCCP, + (png_structp png_ptr, png_infop info_ptr, + png_const_charp name, int compression_type, png_const_bytep profile, + png_uint_32 proflen)); #endif -#if defined(PNG_sPLT_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_sPLT_tpp entries)); +#ifdef PNG_sPLT_SUPPORTED +PNG_EXPORT(160, png_uint_32, png_get_sPLT, + (png_const_structp png_ptr, png_const_infop info_ptr, + png_sPLT_tpp entries)); #endif -#if defined(PNG_sPLT_SUPPORTED) -extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_sPLT_tp entries, int nentries)); +#ifdef PNG_sPLT_SUPPORTED +PNG_EXPORT(161, void, png_set_sPLT, + (png_structp png_ptr, png_infop info_ptr, + png_const_sPLT_tp entries, int nentries)); #endif -#if defined(PNG_TEXT_SUPPORTED) +#ifdef PNG_TEXT_SUPPORTED /* png_get_text also returns the number of text chunks in *num_text */ -extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_textp *text_ptr, int *num_text)); +PNG_EXPORT(162, png_uint_32, png_get_text, + (png_const_structp png_ptr, png_const_infop info_ptr, + png_textp *text_ptr, int *num_text)); #endif -/* - * Note while png_set_text() will accept a structure whose text, - * language, and translated keywords are NULL pointers, the structure - * returned by png_get_text will always contain regular - * zero-terminated C strings. They might be empty strings but - * they will never be NULL pointers. +/* Note while png_set_text() will accept a structure whose text, + * language, and translated keywords are NULL pointers, the structure + * returned by png_get_text will always contain regular + * zero-terminated C strings. They might be empty strings but + * they will never be NULL pointers. */ -#if defined(PNG_TEXT_SUPPORTED) -extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_textp text_ptr, int num_text)); +#ifdef PNG_TEXT_SUPPORTED +PNG_EXPORT(163, void, png_set_text, + (png_structp png_ptr, png_infop info_ptr, + png_const_textp text_ptr, int num_text)); #endif -#if defined(PNG_tIME_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_timep *mod_time)); +#ifdef PNG_tIME_SUPPORTED +PNG_EXPORT(164, png_uint_32, png_get_tIME, + (png_const_structp png_ptr, png_infop info_ptr, png_timep *mod_time)); #endif -#if defined(PNG_tIME_SUPPORTED) -extern PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_timep mod_time)); +#ifdef PNG_tIME_SUPPORTED +PNG_EXPORT(165, void, png_set_tIME, + (png_structp png_ptr, png_infop info_ptr, png_const_timep mod_time)); #endif -#if defined(PNG_tRNS_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_bytep *trans, int *num_trans, - png_color_16p *trans_values)); +#ifdef PNG_tRNS_SUPPORTED +PNG_EXPORT(166, png_uint_32, png_get_tRNS, + (png_const_structp png_ptr, png_infop info_ptr, + png_bytep *trans_alpha, int *num_trans, png_color_16p *trans_color)); #endif -#if defined(PNG_tRNS_SUPPORTED) -extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_bytep trans, int num_trans, - png_color_16p trans_values)); +#ifdef PNG_tRNS_SUPPORTED +PNG_EXPORT(167, void, png_set_tRNS, + (png_structp png_ptr, png_infop info_ptr, + png_const_bytep trans_alpha, int num_trans, + png_const_color_16p trans_color)); #endif -#if defined(PNG_tRNS_SUPPORTED) +#ifdef PNG_sCAL_SUPPORTED +PNG_FP_EXPORT(168, png_uint_32, png_get_sCAL, + (png_const_structp png_ptr, png_const_infop info_ptr, + int *unit, double *width, double *height)); +#ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED +/* NOTE: this API is currently implemented using floating point arithmetic, + * consequently it can only be used on systems with floating point support. + * In any case the range of values supported by png_fixed_point is small and it + * is highly recommended that png_get_sCAL_s be used instead. + */ +PNG_FIXED_EXPORT(214, png_uint_32, png_get_sCAL_fixed, + (png_structp png_ptr, png_const_infop info_ptr, int *unit, + png_fixed_point *width, + png_fixed_point *height)); #endif +PNG_EXPORT(169, png_uint_32, png_get_sCAL_s, + (png_const_structp png_ptr, png_const_infop info_ptr, + int *unit, png_charpp swidth, png_charpp sheight)); -#if defined(PNG_sCAL_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr, - png_infop info_ptr, int *unit, double *width, double *height)); -#else -#ifdef PNG_FIXED_POINT_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr, - png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight)); -#endif -#endif +PNG_FP_EXPORT(170, void, png_set_sCAL, + (png_structp png_ptr, png_infop info_ptr, + int unit, double width, double height)); +PNG_FIXED_EXPORT(213, void, png_set_sCAL_fixed, (png_structp png_ptr, + png_infop info_ptr, int unit, png_fixed_point width, + png_fixed_point height)); +PNG_EXPORT(171, void, png_set_sCAL_s, + (png_structp png_ptr, png_infop info_ptr, + int unit, png_const_charp swidth, png_const_charp sheight)); #endif /* PNG_sCAL_SUPPORTED */ -#if defined(PNG_sCAL_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr, - png_infop info_ptr, int unit, double width, double height)); -#else -#ifdef PNG_FIXED_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr, - png_infop info_ptr, int unit, png_charp swidth, png_charp sheight)); -#endif -#endif -#endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */ - -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) -/* provide a list of chunks and how they are to be handled, if the built-in +#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED +/* Provide a list of chunks and how they are to be handled, if the built-in handling or default unknown chunk handling is not desired. Any chunks not listed will be handled in the default manner. The IHDR and IEND chunks - must not be listed. - keep = 0: follow default behaviour - = 1: do not keep - = 2: keep only if safe-to-copy - = 3: keep even if unsafe-to-copy + must not be listed. Because this turns off the default handling for chunks + that would otherwise be recognized the behavior of libpng transformations may + well become incorrect! + keep = 0: PNG_HANDLE_CHUNK_AS_DEFAULT: follow default behavior + = 1: PNG_HANDLE_CHUNK_NEVER: do not keep + = 2: PNG_HANDLE_CHUNK_IF_SAFE: keep only if safe-to-copy + = 3: PNG_HANDLE_CHUNK_ALWAYS: keep even if unsafe-to-copy */ -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)); +PNG_EXPORT(172, void, png_set_keep_unknown_chunks, + (png_structp png_ptr, int keep, + png_const_bytep chunk_list, int num_chunks)); + +/* The handling code is returned; the result is therefore true (non-zero) if + * special handling is required, false for the default handling. + */ +PNG_EXPORT(173, int, png_handle_as_unknown, (png_structp png_ptr, + png_const_bytep chunk_name)); #endif -#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED -PNG_EXPORT(int,png_handle_as_unknown) PNGARG((png_structp png_ptr, png_bytep - chunk_name)); +#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED +PNG_EXPORT(174, void, png_set_unknown_chunks, (png_structp png_ptr, + png_infop info_ptr, png_const_unknown_chunkp unknowns, + int num_unknowns)); +PNG_EXPORT(175, void, png_set_unknown_chunk_location, + (png_structp png_ptr, png_infop info_ptr, int chunk, int location)); +PNG_EXPORT(176, int, png_get_unknown_chunks, (png_const_structp png_ptr, + png_const_infop info_ptr, png_unknown_chunkpp entries)); #endif /* Png_free_data() will turn off the "valid" flag for anything it frees. - If you need to turn it off for a chunk that your application has freed, - you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); */ -extern PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr, - png_infop info_ptr, int mask)); - -#if defined(PNG_INFO_IMAGE_SUPPORTED) -/* The "params" pointer is currently not used and is for future expansion. */ -extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr, - png_infop info_ptr, - int transforms, - png_voidp params)); -extern PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr, - png_infop info_ptr, - int transforms, - png_voidp params)); -#endif - -/* Define PNG_DEBUG at compile time for debugging information. Higher - * numbers for PNG_DEBUG mean more debugging information. This has - * only been added since version 0.95 so it is not implemented throughout - * libpng yet, but more support will be added as needed. + * If you need to turn it off for a chunk that your application has freed, + * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); */ -#ifdef PNG_DEBUG -#if (PNG_DEBUG > 0) -#if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER) -#include -#if (PNG_DEBUG > 1) -#define png_debug(l,m) _RPT0(_CRT_WARN,m) -#define png_debug1(l,m,p1) _RPT1(_CRT_WARN,m,p1) -#define png_debug2(l,m,p1,p2) _RPT2(_CRT_WARN,m,p1,p2) -#endif -#else /* PNG_DEBUG_FILE || !_MSC_VER */ -#ifndef PNG_DEBUG_FILE -#define PNG_DEBUG_FILE stderr -#endif /* PNG_DEBUG_FILE */ -#if (PNG_DEBUG > 1) -#define png_debug(l,m) \ -{ \ - int num_tabs=l; \ - fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ - (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":"")))); \ -} -#define png_debug1(l,m,p1) \ -{ \ - int num_tabs=l; \ - fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ - (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1); \ -} -#define png_debug2(l,m,p1,p2) \ -{ \ - int num_tabs=l; \ - fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ - (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1,p2); \ -} -#endif /* (PNG_DEBUG > 1) */ -#endif /* _MSC_VER */ -#endif /* (PNG_DEBUG > 0) */ -#endif /* PNG_DEBUG */ -#ifndef png_debug -#define png_debug(l, m) -#endif -#ifndef png_debug1 -#define png_debug1(l, m, p1) -#endif -#ifndef png_debug2 -#define png_debug2(l, m, p1, p2) +PNG_EXPORT(177, void, png_set_invalid, + (png_structp png_ptr, png_infop info_ptr, int mask)); + +#ifdef PNG_INFO_IMAGE_SUPPORTED +/* The "params" pointer is currently not used and is for future expansion. */ +PNG_EXPORT(178, void, png_read_png, (png_structp png_ptr, png_infop info_ptr, + int transforms, png_voidp params)); +PNG_EXPORT(179, void, png_write_png, (png_structp png_ptr, png_infop info_ptr, + int transforms, png_voidp params)); #endif -extern PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr)); -extern PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr)); -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)); +PNG_EXPORT(180, png_const_charp, png_get_copyright, + (png_const_structp png_ptr)); +PNG_EXPORT(181, png_const_charp, png_get_header_ver, + (png_const_structp png_ptr)); +PNG_EXPORT(182, png_const_charp, png_get_header_version, + (png_const_structp png_ptr)); +PNG_EXPORT(183, png_const_charp, png_get_libpng_ver, + (png_const_structp png_ptr)); #ifdef PNG_MNG_FEATURES_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp - png_ptr, png_uint_32 mng_features_permitted)); +PNG_EXPORT(184, png_uint_32, png_permit_mng_features, (png_structp png_ptr, + png_uint_32 mng_features_permitted)); #endif /* For use in png_set_keep_unknown, added to version 1.2.6 */ @@ -2559,93 +2402,148 @@ extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp #define PNG_HANDLE_CHUNK_IF_SAFE 2 #define PNG_HANDLE_CHUNK_ALWAYS 3 -/* Added to version 1.2.0 */ -#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) -#if defined(PNG_MMX_CODE_SUPPORTED) -#define PNG_ASM_FLAG_MMX_SUPPORT_COMPILED 0x01 /* not user-settable */ -#define PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU 0x02 /* not user-settable */ -#define PNG_ASM_FLAG_MMX_READ_COMBINE_ROW 0x04 -#define PNG_ASM_FLAG_MMX_READ_INTERLACE 0x08 -#define PNG_ASM_FLAG_MMX_READ_FILTER_SUB 0x10 -#define PNG_ASM_FLAG_MMX_READ_FILTER_UP 0x20 -#define PNG_ASM_FLAG_MMX_READ_FILTER_AVG 0x40 -#define PNG_ASM_FLAG_MMX_READ_FILTER_PAETH 0x80 -#define PNG_ASM_FLAGS_INITIALIZED 0x80000000 /* not user-settable */ - -#define PNG_MMX_READ_FLAGS ( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \ - | PNG_ASM_FLAG_MMX_READ_INTERLACE \ - | PNG_ASM_FLAG_MMX_READ_FILTER_SUB \ - | PNG_ASM_FLAG_MMX_READ_FILTER_UP \ - | PNG_ASM_FLAG_MMX_READ_FILTER_AVG \ - | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ) -#define PNG_MMX_WRITE_FLAGS ( 0 ) - -#define PNG_MMX_FLAGS ( PNG_ASM_FLAG_MMX_SUPPORT_COMPILED \ - | PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU \ - | PNG_MMX_READ_FLAGS \ - | PNG_MMX_WRITE_FLAGS ) - -#define PNG_SELECT_READ 1 -#define PNG_SELECT_WRITE 2 -#endif /* PNG_MMX_CODE_SUPPORTED */ - -#if !defined(PNG_1_0_X) -/* pngget.c */ -extern PNG_EXPORT(png_uint_32,png_get_mmx_flagmask) - PNGARG((int flag_select, int *compilerID)); - -/* pngget.c */ -extern PNG_EXPORT(png_uint_32,png_get_asm_flagmask) - PNGARG((int flag_select)); - -/* pngget.c */ -extern PNG_EXPORT(png_uint_32,png_get_asm_flags) - PNGARG((png_structp png_ptr)); - -/* pngget.c */ -extern PNG_EXPORT(png_byte,png_get_mmx_bitdepth_threshold) - PNGARG((png_structp png_ptr)); - -/* pngget.c */ -extern PNG_EXPORT(png_uint_32,png_get_mmx_rowbytes_threshold) - PNGARG((png_structp png_ptr)); - -/* pngset.c */ -extern PNG_EXPORT(void,png_set_asm_flags) - PNGARG((png_structp png_ptr, png_uint_32 asm_flags)); - -/* pngset.c */ -extern PNG_EXPORT(void,png_set_mmx_thresholds) - PNGARG((png_structp png_ptr, png_byte mmx_bitdepth_threshold, - png_uint_32 mmx_rowbytes_threshold)); - -#endif /* PNG_1_0_X */ - -#if !defined(PNG_1_0_X) -/* png.c, pnggccrd.c, or pngvcrd.c */ -extern PNG_EXPORT(int,png_mmx_support) PNGARG((void)); -#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */ - /* Strip the prepended error numbers ("#nnn ") from error and warning - * messages before passing them to the error or warning handler. */ + * messages before passing them to the error or warning handler. + */ #ifdef PNG_ERROR_NUMBERS_SUPPORTED -extern PNG_EXPORT(void,png_set_strip_error_numbers) PNGARG((png_structp - png_ptr, png_uint_32 strip_mode)); +PNG_EXPORT(185, void, png_set_strip_error_numbers, + (png_structp png_ptr, + png_uint_32 strip_mode)); #endif -#endif /* PNG_1_0_X */ - -/* Added at libpng-1.2.6 */ +/* Added in libpng-1.2.6 */ #ifdef PNG_SET_USER_LIMITS_SUPPORTED -extern PNG_EXPORT(void,png_set_user_limits) PNGARG((png_structp - png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max)); -extern PNG_EXPORT(png_uint_32,png_get_user_width_max) PNGARG((png_structp - png_ptr)); -extern PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp - png_ptr)); +PNG_EXPORT(186, void, png_set_user_limits, (png_structp png_ptr, + png_uint_32 user_width_max, png_uint_32 user_height_max)); +PNG_EXPORT(187, png_uint_32, png_get_user_width_max, + (png_const_structp png_ptr)); +PNG_EXPORT(188, png_uint_32, png_get_user_height_max, + (png_const_structp png_ptr)); +/* Added in libpng-1.4.0 */ +PNG_EXPORT(189, void, png_set_chunk_cache_max, (png_structp png_ptr, + png_uint_32 user_chunk_cache_max)); +PNG_EXPORT(190, png_uint_32, png_get_chunk_cache_max, + (png_const_structp png_ptr)); +/* Added in libpng-1.4.1 */ +PNG_EXPORT(191, void, png_set_chunk_malloc_max, (png_structp png_ptr, + png_alloc_size_t user_chunk_cache_max)); +PNG_EXPORT(192, png_alloc_size_t, png_get_chunk_malloc_max, + (png_const_structp png_ptr)); #endif -/* Maintainer: Put new public prototypes here ^, in libpng.3, and project defs */ +#if defined(PNG_INCH_CONVERSIONS_SUPPORTED) +PNG_EXPORT(193, png_uint_32, png_get_pixels_per_inch, + (png_const_structp png_ptr, png_const_infop info_ptr)); + +PNG_EXPORT(194, png_uint_32, png_get_x_pixels_per_inch, + (png_const_structp png_ptr, png_const_infop info_ptr)); + +PNG_EXPORT(195, png_uint_32, png_get_y_pixels_per_inch, + (png_const_structp png_ptr, png_const_infop info_ptr)); + +PNG_FP_EXPORT(196, float, png_get_x_offset_inches, + (png_const_structp png_ptr, png_const_infop info_ptr)); +#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */ +PNG_FIXED_EXPORT(211, png_fixed_point, png_get_x_offset_inches_fixed, + (png_structp png_ptr, png_const_infop info_ptr)); +#endif + +PNG_FP_EXPORT(197, float, png_get_y_offset_inches, (png_const_structp png_ptr, + png_const_infop info_ptr)); +#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */ +PNG_FIXED_EXPORT(212, png_fixed_point, png_get_y_offset_inches_fixed, + (png_structp png_ptr, png_const_infop info_ptr)); +#endif + +# ifdef PNG_pHYs_SUPPORTED +PNG_EXPORT(198, png_uint_32, png_get_pHYs_dpi, (png_const_structp png_ptr, + png_const_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, + int *unit_type)); +# endif /* PNG_pHYs_SUPPORTED */ +#endif /* PNG_INCH_CONVERSIONS_SUPPORTED */ + +/* Added in libpng-1.4.0 */ +#ifdef PNG_IO_STATE_SUPPORTED +PNG_EXPORT(199, png_uint_32, png_get_io_state, (png_structp png_ptr)); + +PNG_EXPORTA(200, png_const_bytep, png_get_io_chunk_name, + (png_structp png_ptr), PNG_DEPRECATED); +PNG_EXPORT(216, png_uint_32, png_get_io_chunk_type, + (png_const_structp png_ptr)); + +/* The flags returned by png_get_io_state() are the following: */ +# define PNG_IO_NONE 0x0000 /* no I/O at this moment */ +# define PNG_IO_READING 0x0001 /* currently reading */ +# define PNG_IO_WRITING 0x0002 /* currently writing */ +# define PNG_IO_SIGNATURE 0x0010 /* currently at the file signature */ +# define PNG_IO_CHUNK_HDR 0x0020 /* currently at the chunk header */ +# define PNG_IO_CHUNK_DATA 0x0040 /* currently at the chunk data */ +# define PNG_IO_CHUNK_CRC 0x0080 /* currently at the chunk crc */ +# define PNG_IO_MASK_OP 0x000f /* current operation: reading/writing */ +# define PNG_IO_MASK_LOC 0x00f0 /* current location: sig/hdr/data/crc */ +#endif /* ?PNG_IO_STATE_SUPPORTED */ + +/* Interlace support. The following macros are always defined so that if + * libpng interlace handling is turned off the macros may be used to handle + * interlaced images within the application. + */ +#define PNG_INTERLACE_ADAM7_PASSES 7 + +/* Two macros to return the first row and first column of the original, + * full, image which appears in a given pass. 'pass' is in the range 0 + * to 6 and the result is in the range 0 to 7. + */ +#define PNG_PASS_START_ROW(pass) (((1&~(pass))<<(3-((pass)>>1)))&7) +#define PNG_PASS_START_COL(pass) (((1& (pass))<<(3-(((pass)+1)>>1)))&7) + +/* A macro to return the offset between pixels in the output row for a pair of + * pixels in the input - effectively the inverse of the 'COL_SHIFT' macro that + * follows. Note that ROW_OFFSET is the offset from one row to the next whereas + * COL_OFFSET is from one column to the next, within a row. + */ +#define PNG_PASS_ROW_OFFSET(pass) ((pass)>2?(8>>(((pass)-1)>>1)):8) +#define PNG_PASS_COL_OFFSET(pass) (1<<((7-(pass))>>1)) + +/* Two macros to help evaluate the number of rows or columns in each + * pass. This is expressed as a shift - effectively log2 of the number or + * rows or columns in each 8x8 tile of the original image. + */ +#define PNG_PASS_ROW_SHIFT(pass) ((pass)>2?(8-(pass))>>1:3) +#define PNG_PASS_COL_SHIFT(pass) ((pass)>1?(7-(pass))>>1:3) + +/* Hence two macros to determine the number of rows or columns in a given + * pass of an image given its height or width. In fact these macros may + * return non-zero even though the sub-image is empty, because the other + * dimension may be empty for a small image. + */ +#define PNG_PASS_ROWS(height, pass) (((height)+(((1<>PNG_PASS_ROW_SHIFT(pass)) +#define PNG_PASS_COLS(width, pass) (((width)+(((1<>PNG_PASS_COL_SHIFT(pass)) + +/* For the reader row callbacks (both progressive and sequential) it is + * necessary to find the row in the output image given a row in an interlaced + * image, so two more macros: + */ +#define PNG_ROW_FROM_PASS_ROW(yIn, pass) \ + (((yIn)<>(((7-(off))-(pass))<<2)) & 0xF) | \ + ((0x01145AF0>>(((7-(off))-(pass))<<2)) & 0xF0)) + +#define PNG_ROW_IN_INTERLACE_PASS(y, pass) \ + ((PNG_PASS_MASK(pass,0) >> ((y)&7)) & 1) +#define PNG_COL_IN_INTERLACE_PASS(x, pass) \ + ((PNG_PASS_MASK(pass,1) >> ((x)&7)) & 1) #ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED /* With these routines we avoid an integer divide, which will be slower on @@ -2660,910 +2558,109 @@ extern PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ] */ - /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */ + /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */ -# define png_composite(composite, fg, alpha, bg) \ - { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) * (png_uint_16)(alpha) \ - + (png_uint_16)(bg)*(png_uint_16)(255 - \ - (png_uint_16)(alpha)) + (png_uint_16)128); \ +# define png_composite(composite, fg, alpha, bg) \ + { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \ + * (png_uint_16)(alpha) \ + + (png_uint_16)(bg)*(png_uint_16)(255 \ + - (png_uint_16)(alpha)) + 128); \ (composite) = (png_byte)((temp + (temp >> 8)) >> 8); } -# define png_composite_16(composite, fg, alpha, bg) \ - { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) * (png_uint_32)(alpha) \ - + (png_uint_32)(bg)*(png_uint_32)(65535L - \ - (png_uint_32)(alpha)) + (png_uint_32)32768L); \ +# define png_composite_16(composite, fg, alpha, bg) \ + { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) \ + * (png_uint_32)(alpha) \ + + (png_uint_32)(bg)*(65535 \ + - (png_uint_32)(alpha)) + 32768); \ (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); } -#else /* standard method using integer division */ +#else /* Standard method using integer division */ -# define png_composite(composite, fg, alpha, bg) \ - (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) + \ - (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \ - (png_uint_16)127) / 255) +# define png_composite(composite, fg, alpha, bg) \ + (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) + \ + (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \ + 127) / 255) # define png_composite_16(composite, fg, alpha, bg) \ (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \ - (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) + \ - (png_uint_32)32767) / (png_uint_32)65535L) - + (png_uint_32)(bg)*(png_uint_32)(65535 - (png_uint_32)(alpha)) + \ + 32767) / 65535) #endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */ -/* Inline macros to do direct reads of bytes from the input buffer. These - * require that you are using an architecture that uses PNG byte ordering - * (MSB first) and supports unaligned data storage. I think that PowerPC - * in big-endian mode and 680x0 are the only ones that will support this. - * The x86 line of processors definitely do not. The png_get_int_32() - * routine also assumes we are using two's complement format for negative - * values, which is almost certainly true. - */ -#if defined(PNG_READ_BIG_ENDIAN_SUPPORTED) -# define png_get_uint_32(buf) ( *((png_uint_32p) (buf))) -# define png_get_uint_16(buf) ( *((png_uint_16p) (buf))) -# define png_get_int_32(buf) ( *((png_int_32p) (buf))) -#else -extern PNG_EXPORT(png_uint_32,png_get_uint_32) PNGARG((png_bytep buf)); -extern PNG_EXPORT(png_uint_16,png_get_uint_16) PNGARG((png_bytep buf)); -extern PNG_EXPORT(png_int_32,png_get_int_32) PNGARG((png_bytep buf)); -#endif /* !PNG_READ_BIG_ENDIAN_SUPPORTED */ -extern PNG_EXPORT(png_uint_32,png_get_uint_31) - PNGARG((png_structp png_ptr, png_bytep buf)); +#ifdef PNG_READ_INT_FUNCTIONS_SUPPORTED +PNG_EXPORT(201, png_uint_32, png_get_uint_32, (png_const_bytep buf)); +PNG_EXPORT(202, png_uint_16, png_get_uint_16, (png_const_bytep buf)); +PNG_EXPORT(203, png_int_32, png_get_int_32, (png_const_bytep buf)); +#endif + +PNG_EXPORT(204, png_uint_32, png_get_uint_31, (png_structp png_ptr, + png_const_bytep buf)); /* No png_get_int_16 -- may be added if there's a real need for it. */ -/* Place a 32-bit number into a buffer in PNG byte order (big-endian). - */ -extern PNG_EXPORT(void,png_save_uint_32) - PNGARG((png_bytep buf, png_uint_32 i)); -extern PNG_EXPORT(void,png_save_int_32) - PNGARG((png_bytep buf, png_int_32 i)); +/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */ +#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED +PNG_EXPORT(205, void, png_save_uint_32, (png_bytep buf, png_uint_32 i)); +#endif +#ifdef PNG_SAVE_INT_32_SUPPORTED +PNG_EXPORT(206, void, png_save_int_32, (png_bytep buf, png_int_32 i)); +#endif /* Place a 16-bit number into a buffer in PNG byte order. * The parameter is declared unsigned int, not png_uint_16, * just to avoid potential problems on pre-ANSI C compilers. */ -extern PNG_EXPORT(void,png_save_uint_16) - PNGARG((png_bytep buf, unsigned int i)); +#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED +PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i)); /* No png_save_int_16 -- may be added if there's a real need for it. */ +#endif -/* ************************************************************************* */ +#ifdef PNG_USE_READ_MACROS +/* Inline macros to do direct reads of bytes from the input buffer. + * The png_get_int_32() routine assumes we are using two's complement + * format for negative values, which is almost certainly true. + */ +# define png_get_uint_32(buf) \ + (((png_uint_32)(*(buf)) << 24) + \ + ((png_uint_32)(*((buf) + 1)) << 16) + \ + ((png_uint_32)(*((buf) + 2)) << 8) + \ + ((png_uint_32)(*((buf) + 3)))) -/* These next functions are used internally in the code. They generally - * shouldn't be used unless you are writing code to add or replace some - * functionality in libpng. More information about most functions can - * be found in the files where the functions are located. + /* From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the + * function) incorrectly returned a value of type png_uint_32. + */ +# define png_get_uint_16(buf) \ + ((png_uint_16) \ + (((unsigned int)(*(buf)) << 8) + \ + ((unsigned int)(*((buf) + 1))))) + +# define png_get_int_32(buf) \ + ((png_int_32)((*(buf) & 0x80) \ + ? -((png_int_32)((png_get_uint_32(buf) ^ 0xffffffffL) + 1)) \ + : (png_int_32)png_get_uint_32(buf))) +#endif + +#if defined(PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED) || \ + defined(PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED) +PNG_EXPORT(234, void, png_set_check_for_invalid_index, (png_structp png_ptr, + int allowed)); +#endif + +/* Maintainer: Put new public prototypes here ^, in libpng.3, and project + * defs */ - -/* Various modes of operation, that are visible to applications because - * they are used for unknown chunk location. +/* The last ordinal number (this is the *last* one already used; the next + * one to use is one more than this.) Maintainer, remember to add an entry to + * scripts/symbols.def as well. */ -#define PNG_HAVE_IHDR 0x01 -#define PNG_HAVE_PLTE 0x02 -#define PNG_HAVE_IDAT 0x04 -#define PNG_AFTER_IDAT 0x08 /* Have complete zlib datastream */ -#define PNG_HAVE_IEND 0x10 - -#if defined(PNG_INTERNAL) - -/* More modes of operation. Note that after an init, mode is set to - * zero automatically when the structure is created. - */ -#define PNG_HAVE_gAMA 0x20 -#define PNG_HAVE_cHRM 0x40 -#define PNG_HAVE_sRGB 0x80 -#define PNG_HAVE_CHUNK_HEADER 0x100 -#define PNG_WROTE_tIME 0x200 -#define PNG_WROTE_INFO_BEFORE_PLTE 0x400 -#define PNG_BACKGROUND_IS_GRAY 0x800 -#define PNG_HAVE_PNG_SIGNATURE 0x1000 -#define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */ - -/* flags for the transformations the PNG library does on the image data */ -#define PNG_BGR 0x0001 -#define PNG_INTERLACE 0x0002 -#define PNG_PACK 0x0004 -#define PNG_SHIFT 0x0008 -#define PNG_SWAP_BYTES 0x0010 -#define PNG_INVERT_MONO 0x0020 -#define PNG_DITHER 0x0040 -#define PNG_BACKGROUND 0x0080 -#define PNG_BACKGROUND_EXPAND 0x0100 - /* 0x0200 unused */ -#define PNG_16_TO_8 0x0400 -#define PNG_RGBA 0x0800 -#define PNG_EXPAND 0x1000 -#define PNG_GAMMA 0x2000 -#define PNG_GRAY_TO_RGB 0x4000 -#define PNG_FILLER 0x8000L -#define PNG_PACKSWAP 0x10000L -#define PNG_SWAP_ALPHA 0x20000L -#define PNG_STRIP_ALPHA 0x40000L -#define PNG_INVERT_ALPHA 0x80000L -#define PNG_USER_TRANSFORM 0x100000L -#define PNG_RGB_TO_GRAY_ERR 0x200000L -#define PNG_RGB_TO_GRAY_WARN 0x400000L -#define PNG_RGB_TO_GRAY 0x600000L /* two bits, RGB_TO_GRAY_ERR|WARN */ - /* 0x800000L Unused */ -#define PNG_ADD_ALPHA 0x1000000L /* Added to libpng-1.2.7 */ -#define PNG_EXPAND_tRNS 0x2000000L /* Added to libpng-1.2.9 */ - /* 0x4000000L unused */ - /* 0x8000000L unused */ - /* 0x10000000L unused */ - /* 0x20000000L unused */ - /* 0x40000000L unused */ - -/* flags for png_create_struct */ -#define PNG_STRUCT_PNG 0x0001 -#define PNG_STRUCT_INFO 0x0002 - -/* Scaling factor for filter heuristic weighting calculations */ -#define PNG_WEIGHT_SHIFT 8 -#define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT)) -#define PNG_COST_SHIFT 3 -#define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT)) - -/* flags for the png_ptr->flags rather than declaring a byte for each one */ -#define PNG_FLAG_ZLIB_CUSTOM_STRATEGY 0x0001 -#define PNG_FLAG_ZLIB_CUSTOM_LEVEL 0x0002 -#define PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL 0x0004 -#define PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS 0x0008 -#define PNG_FLAG_ZLIB_CUSTOM_METHOD 0x0010 -#define PNG_FLAG_ZLIB_FINISHED 0x0020 -#define PNG_FLAG_ROW_INIT 0x0040 -#define PNG_FLAG_FILLER_AFTER 0x0080 -#define PNG_FLAG_CRC_ANCILLARY_USE 0x0100 -#define PNG_FLAG_CRC_ANCILLARY_NOWARN 0x0200 -#define PNG_FLAG_CRC_CRITICAL_USE 0x0400 -#define PNG_FLAG_CRC_CRITICAL_IGNORE 0x0800 -#define PNG_FLAG_FREE_PLTE 0x1000 -#define PNG_FLAG_FREE_TRNS 0x2000 -#define PNG_FLAG_FREE_HIST 0x4000 -#define PNG_FLAG_KEEP_UNKNOWN_CHUNKS 0x8000L -#define PNG_FLAG_KEEP_UNSAFE_CHUNKS 0x10000L -#define PNG_FLAG_LIBRARY_MISMATCH 0x20000L -#define PNG_FLAG_STRIP_ERROR_NUMBERS 0x40000L -#define PNG_FLAG_STRIP_ERROR_TEXT 0x80000L -#define PNG_FLAG_MALLOC_NULL_MEM_OK 0x100000L -#define PNG_FLAG_ADD_ALPHA 0x200000L /* Added to libpng-1.2.8 */ -#define PNG_FLAG_STRIP_ALPHA 0x400000L /* Added to libpng-1.2.8 */ - /* 0x800000L unused */ - /* 0x1000000L unused */ - /* 0x2000000L unused */ - /* 0x4000000L unused */ - /* 0x8000000L unused */ - /* 0x10000000L unused */ - /* 0x20000000L unused */ - /* 0x40000000L unused */ - -#define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \ - PNG_FLAG_CRC_ANCILLARY_NOWARN) - -#define PNG_FLAG_CRC_CRITICAL_MASK (PNG_FLAG_CRC_CRITICAL_USE | \ - PNG_FLAG_CRC_CRITICAL_IGNORE) - -#define PNG_FLAG_CRC_MASK (PNG_FLAG_CRC_ANCILLARY_MASK | \ - PNG_FLAG_CRC_CRITICAL_MASK) - -/* save typing and make code easier to understand */ - -#define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \ - abs((int)((c1).green) - (int)((c2).green)) + \ - abs((int)((c1).blue) - (int)((c2).blue))) - -/* Added to libpng-1.2.6 JB */ -#define PNG_ROWBYTES(pixel_bits, width) \ - ((pixel_bits) >= 8 ? \ - ((width) * (((png_uint_32)(pixel_bits)) >> 3)) : \ - (( ((width) * ((png_uint_32)(pixel_bits))) + 7) >> 3) ) - -/* PNG_OUT_OF_RANGE returns true if value is outside the range - ideal-delta..ideal+delta. Each argument is evaluated twice. - "ideal" and "delta" should be constants, normally simple - integers, "value" a variable. Added to libpng-1.2.6 JB */ -#define PNG_OUT_OF_RANGE(value, ideal, delta) \ - ( (value) < (ideal)-(delta) || (value) > (ideal)+(delta) ) - -/* variables declared in png.c - only it needs to define PNG_NO_EXTERN */ -#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN) -/* place to hold the signature string for a PNG file. */ -#ifdef PNG_USE_GLOBAL_ARRAYS - PNG_EXPORT_VAR (PNG_CONST png_byte FARDATA) png_sig[8]; -#else +#ifdef PNG_EXPORT_LAST_ORDINAL + PNG_EXPORT_LAST_ORDINAL(234); #endif -#endif /* PNG_NO_EXTERN */ - -/* Constant strings for known chunk types. If you need to add a chunk, - * define the name here, and add an invocation of the macro in png.c and - * wherever it's needed. - */ -#define PNG_IHDR png_byte png_IHDR[5] = { 73, 72, 68, 82, '\0'} -#define PNG_IDAT png_byte png_IDAT[5] = { 73, 68, 65, 84, '\0'} -#define PNG_IEND png_byte png_IEND[5] = { 73, 69, 78, 68, '\0'} -#define PNG_PLTE png_byte png_PLTE[5] = { 80, 76, 84, 69, '\0'} -#define PNG_bKGD png_byte png_bKGD[5] = { 98, 75, 71, 68, '\0'} -#define PNG_cHRM png_byte png_cHRM[5] = { 99, 72, 82, 77, '\0'} -#define PNG_gAMA png_byte png_gAMA[5] = {103, 65, 77, 65, '\0'} -#define PNG_hIST png_byte png_hIST[5] = {104, 73, 83, 84, '\0'} -#define PNG_iCCP png_byte png_iCCP[5] = {105, 67, 67, 80, '\0'} -#define PNG_iTXt png_byte png_iTXt[5] = {105, 84, 88, 116, '\0'} -#define PNG_oFFs png_byte png_oFFs[5] = {111, 70, 70, 115, '\0'} -#define PNG_pCAL png_byte png_pCAL[5] = {112, 67, 65, 76, '\0'} -#define PNG_sCAL png_byte png_sCAL[5] = {115, 67, 65, 76, '\0'} -#define PNG_pHYs png_byte png_pHYs[5] = {112, 72, 89, 115, '\0'} -#define PNG_sBIT png_byte png_sBIT[5] = {115, 66, 73, 84, '\0'} -#define PNG_sPLT png_byte png_sPLT[5] = {115, 80, 76, 84, '\0'} -#define PNG_sRGB png_byte png_sRGB[5] = {115, 82, 71, 66, '\0'} -#define PNG_tEXt png_byte png_tEXt[5] = {116, 69, 88, 116, '\0'} -#define PNG_tIME png_byte png_tIME[5] = {116, 73, 77, 69, '\0'} -#define PNG_tRNS png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'} -#define PNG_zTXt png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'} - -#ifdef PNG_USE_GLOBAL_ARRAYS -PNG_EXPORT_VAR (png_byte FARDATA) png_IHDR[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_IDAT[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_IEND[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_PLTE[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_bKGD[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_cHRM[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_gAMA[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_hIST[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_iCCP[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_iTXt[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_oFFs[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_pCAL[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_sCAL[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_pHYs[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_sBIT[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_sPLT[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_sRGB[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_tEXt[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_tIME[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_tRNS[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_zTXt[5]; -#endif /* PNG_USE_GLOBAL_ARRAYS */ - -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -/* Initialize png_ptr struct for reading, and allocate any other memory. - * (old interface - DEPRECATED - use png_create_read_struct instead). - */ -extern PNG_EXPORT(void,png_read_init) PNGARG((png_structp png_ptr)); -#undef png_read_init -#define png_read_init(png_ptr) png_read_init_3(&png_ptr, \ - PNG_LIBPNG_VER_STRING, png_sizeof(png_struct)); -#endif - -extern PNG_EXPORT(void,png_read_init_3) PNGARG((png_structpp ptr_ptr, - png_const_charp user_png_ver, png_size_t png_struct_size)); -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -extern PNG_EXPORT(void,png_read_init_2) PNGARG((png_structp png_ptr, - png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t - png_info_size)); -#endif - -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -/* Initialize png_ptr struct for writing, and allocate any other memory. - * (old interface - DEPRECATED - use png_create_write_struct instead). - */ -extern PNG_EXPORT(void,png_write_init) PNGARG((png_structp png_ptr)); -#undef png_write_init -#define png_write_init(png_ptr) png_write_init_3(&png_ptr, \ - PNG_LIBPNG_VER_STRING, png_sizeof(png_struct)); -#endif - -extern PNG_EXPORT(void,png_write_init_3) PNGARG((png_structpp ptr_ptr, - png_const_charp user_png_ver, png_size_t png_struct_size)); -extern PNG_EXPORT(void,png_write_init_2) PNGARG((png_structp png_ptr, - png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t - png_info_size)); - -/* Allocate memory for an internal libpng struct */ -PNG_EXTERN png_voidp png_create_struct PNGARG((int type)); - -/* Free memory from internal libpng struct */ -PNG_EXTERN void png_destroy_struct PNGARG((png_voidp struct_ptr)); - -PNG_EXTERN png_voidp png_create_struct_2 PNGARG((int type, png_malloc_ptr - malloc_fn, png_voidp mem_ptr)); -PNG_EXTERN void png_destroy_struct_2 PNGARG((png_voidp struct_ptr, - png_free_ptr free_fn, png_voidp mem_ptr)); - -/* Free any memory that info_ptr points to and reset struct. */ -PNG_EXTERN void png_info_destroy PNGARG((png_structp png_ptr, - png_infop info_ptr)); - -#ifndef PNG_1_0_X -/* Function to allocate memory for zlib. */ -PNG_EXTERN voidpf png_zalloc PNGARG((voidpf png_ptr, uInt items, uInt size)); - -/* Function to free memory for zlib */ -PNG_EXTERN void png_zfree PNGARG((voidpf png_ptr, voidpf ptr)); - -#ifdef PNG_SIZE_T -/* Function to convert a sizeof an item to png_sizeof item */ - PNG_EXTERN png_size_t PNGAPI png_convert_size PNGARG((size_t size)); -#endif - -/* Next four functions are used internally as callbacks. PNGAPI is required - * but not PNG_EXPORT. PNGAPI added at libpng version 1.2.3. */ - -PNG_EXTERN void PNGAPI png_default_read_data PNGARG((png_structp png_ptr, - png_bytep data, png_size_t length)); - -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -PNG_EXTERN void PNGAPI png_push_fill_buffer PNGARG((png_structp png_ptr, - png_bytep buffer, png_size_t length)); -#endif - -PNG_EXTERN void PNGAPI png_default_write_data PNGARG((png_structp png_ptr, - png_bytep data, png_size_t length)); - -#if defined(PNG_WRITE_FLUSH_SUPPORTED) -#if !defined(PNG_NO_STDIO) -PNG_EXTERN void PNGAPI png_default_flush PNGARG((png_structp png_ptr)); -#endif -#endif -#else /* PNG_1_0_X */ -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -PNG_EXTERN void png_push_fill_buffer PNGARG((png_structp png_ptr, - png_bytep buffer, png_size_t length)); -#endif -#endif /* PNG_1_0_X */ - -/* Reset the CRC variable */ -PNG_EXTERN void png_reset_crc PNGARG((png_structp png_ptr)); - -/* Write the "data" buffer to whatever output you are using. */ -PNG_EXTERN void png_write_data PNGARG((png_structp png_ptr, png_bytep data, - png_size_t length)); - -/* Read data from whatever input you are using into the "data" buffer */ -PNG_EXTERN void png_read_data PNGARG((png_structp png_ptr, png_bytep data, - png_size_t length)); - -/* Read bytes into buf, and update png_ptr->crc */ -PNG_EXTERN void png_crc_read PNGARG((png_structp png_ptr, png_bytep buf, - png_size_t length)); - -/* Decompress data in a chunk that uses compression */ -#if defined(PNG_zTXt_SUPPORTED) || defined(PNG_iTXt_SUPPORTED) || \ - defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED) -PNG_EXTERN png_charp png_decompress_chunk PNGARG((png_structp png_ptr, - int comp_type, png_charp chunkdata, png_size_t chunklength, - png_size_t prefix_length, png_size_t *data_length)); -#endif - -/* Read "skip" bytes, read the file crc, and (optionally) verify png_ptr->crc */ -PNG_EXTERN int png_crc_finish PNGARG((png_structp png_ptr, png_uint_32 skip)); - -/* Read the CRC from the file and compare it to the libpng calculated CRC */ -PNG_EXTERN int png_crc_error PNGARG((png_structp png_ptr)); - -/* Calculate the CRC over a section of data. Note that we are only - * passing a maximum of 64K on systems that have this as a memory limit, - * since this is the maximum buffer size we can specify. - */ -PNG_EXTERN void png_calculate_crc PNGARG((png_structp png_ptr, png_bytep ptr, - png_size_t length)); - -#if defined(PNG_WRITE_FLUSH_SUPPORTED) -PNG_EXTERN void png_flush PNGARG((png_structp png_ptr)); -#endif - -/* simple function to write the signature */ -PNG_EXTERN void png_write_sig PNGARG((png_structp png_ptr)); - -/* write various chunks */ - -/* Write the IHDR chunk, and update the png_struct with the necessary - * information. - */ -PNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width, - png_uint_32 height, - int bit_depth, int color_type, int compression_method, int filter_method, - int interlace_method)); - -PNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr, png_colorp palette, - png_uint_32 num_pal)); - -PNG_EXTERN void png_write_IDAT PNGARG((png_structp png_ptr, png_bytep data, - png_size_t length)); - -PNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr)); - -#if defined(PNG_WRITE_gAMA_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -PNG_EXTERN void png_write_gAMA PNGARG((png_structp png_ptr, double file_gamma)); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED -PNG_EXTERN void png_write_gAMA_fixed PNGARG((png_structp png_ptr, png_fixed_point - file_gamma)); -#endif -#endif - -#if defined(PNG_WRITE_sBIT_SUPPORTED) -PNG_EXTERN void png_write_sBIT PNGARG((png_structp png_ptr, png_color_8p sbit, - int color_type)); -#endif - -#if defined(PNG_WRITE_cHRM_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -PNG_EXTERN void png_write_cHRM PNGARG((png_structp png_ptr, - double white_x, double white_y, - double red_x, double red_y, double green_x, double green_y, - double blue_x, double blue_y)); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED -PNG_EXTERN void png_write_cHRM_fixed PNGARG((png_structp png_ptr, - png_fixed_point int_white_x, png_fixed_point int_white_y, - png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point - int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, - png_fixed_point int_blue_y)); -#endif -#endif - -#if defined(PNG_WRITE_sRGB_SUPPORTED) -PNG_EXTERN void png_write_sRGB PNGARG((png_structp png_ptr, - int intent)); -#endif - -#if defined(PNG_WRITE_iCCP_SUPPORTED) -PNG_EXTERN void png_write_iCCP PNGARG((png_structp png_ptr, - png_charp name, int compression_type, - png_charp profile, int proflen)); - /* Note to maintainer: profile should be png_bytep */ -#endif - -#if defined(PNG_WRITE_sPLT_SUPPORTED) -PNG_EXTERN void png_write_sPLT PNGARG((png_structp png_ptr, - png_sPLT_tp palette)); -#endif - -#if defined(PNG_WRITE_tRNS_SUPPORTED) -PNG_EXTERN void png_write_tRNS PNGARG((png_structp png_ptr, png_bytep trans, - png_color_16p values, int number, int color_type)); -#endif - -#if defined(PNG_WRITE_bKGD_SUPPORTED) -PNG_EXTERN void png_write_bKGD PNGARG((png_structp png_ptr, - png_color_16p values, int color_type)); -#endif - -#if defined(PNG_WRITE_hIST_SUPPORTED) -PNG_EXTERN void png_write_hIST PNGARG((png_structp png_ptr, png_uint_16p hist, - int num_hist)); -#endif - -#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \ - defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED) -PNG_EXTERN png_size_t png_check_keyword PNGARG((png_structp png_ptr, - png_charp key, png_charpp new_key)); -#endif - -#if defined(PNG_WRITE_tEXt_SUPPORTED) -PNG_EXTERN void png_write_tEXt PNGARG((png_structp png_ptr, png_charp key, - png_charp text, png_size_t text_len)); -#endif - -#if defined(PNG_WRITE_zTXt_SUPPORTED) -PNG_EXTERN void png_write_zTXt PNGARG((png_structp png_ptr, png_charp key, - png_charp text, png_size_t text_len, int compression)); -#endif - -#if defined(PNG_WRITE_iTXt_SUPPORTED) -PNG_EXTERN void png_write_iTXt PNGARG((png_structp png_ptr, - int compression, png_charp key, png_charp lang, png_charp lang_key, - png_charp text)); -#endif - -#if defined(PNG_TEXT_SUPPORTED) /* Added at version 1.0.14 and 1.2.4 */ -PNG_EXTERN int png_set_text_2 PNGARG((png_structp png_ptr, - png_infop info_ptr, png_textp text_ptr, int num_text)); -#endif - -#if defined(PNG_WRITE_oFFs_SUPPORTED) -PNG_EXTERN void png_write_oFFs PNGARG((png_structp png_ptr, - png_int_32 x_offset, png_int_32 y_offset, int unit_type)); -#endif - -#if defined(PNG_WRITE_pCAL_SUPPORTED) -PNG_EXTERN void png_write_pCAL PNGARG((png_structp png_ptr, png_charp purpose, - png_int_32 X0, png_int_32 X1, int type, int nparams, - png_charp units, png_charpp params)); -#endif - -#if defined(PNG_WRITE_pHYs_SUPPORTED) -PNG_EXTERN void png_write_pHYs PNGARG((png_structp png_ptr, - png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit, - int unit_type)); -#endif - -#if defined(PNG_WRITE_tIME_SUPPORTED) -PNG_EXTERN void png_write_tIME PNGARG((png_structp png_ptr, - png_timep mod_time)); -#endif - -#if defined(PNG_WRITE_sCAL_SUPPORTED) -#if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO) -PNG_EXTERN void png_write_sCAL PNGARG((png_structp png_ptr, - int unit, double width, double height)); -#else -#ifdef PNG_FIXED_POINT_SUPPORTED -PNG_EXTERN void png_write_sCAL_s PNGARG((png_structp png_ptr, - int unit, png_charp width, png_charp height)); -#endif -#endif -#endif - -/* Called when finished processing a row of data */ -PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr)); - -/* Internal use only. Called before first row of data */ -PNG_EXTERN void png_write_start_row PNGARG((png_structp png_ptr)); - -#if defined(PNG_READ_GAMMA_SUPPORTED) -PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr)); -#endif - -/* combine a row of data, dealing with alpha, etc. if requested */ -PNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row, - int mask)); - -#if defined(PNG_READ_INTERLACING_SUPPORTED) -/* expand an interlaced row */ -/* OLD pre-1.0.9 interface: -PNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info, - png_bytep row, int pass, png_uint_32 transformations)); - */ -PNG_EXTERN void png_do_read_interlace PNGARG((png_structp png_ptr)); -#endif - -/* GRR TO DO (2.0 or whenever): simplify other internal calling interfaces */ - -#if defined(PNG_WRITE_INTERLACING_SUPPORTED) -/* grab pixels out of a row for an interlaced pass */ -PNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info, - png_bytep row, int pass)); -#endif - -/* unfilter a row */ -PNG_EXTERN void png_read_filter_row PNGARG((png_structp png_ptr, - png_row_infop row_info, png_bytep row, png_bytep prev_row, int filter)); - -/* Choose the best filter to use and filter the row data */ -PNG_EXTERN void png_write_find_filter PNGARG((png_structp png_ptr, - png_row_infop row_info)); - -/* Write out the filtered row. */ -PNG_EXTERN void png_write_filtered_row PNGARG((png_structp png_ptr, - png_bytep filtered_row)); -/* finish a row while reading, dealing with interlacing passes, etc. */ -PNG_EXTERN void png_read_finish_row PNGARG((png_structp png_ptr)); - -/* initialize the row buffers, etc. */ -PNG_EXTERN void png_read_start_row PNGARG((png_structp png_ptr)); -/* optional call to update the users info structure */ -PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr, - png_infop info_ptr)); - -/* these are the functions that do the transformations */ -#if defined(PNG_READ_FILLER_SUPPORTED) -PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info, - png_bytep row, png_uint_32 filler, png_uint_32 flags)); -#endif - -#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) -PNG_EXTERN void png_do_read_swap_alpha PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) -PNG_EXTERN void png_do_write_swap_alpha PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) -PNG_EXTERN void png_do_read_invert_alpha PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) -PNG_EXTERN void png_do_write_invert_alpha PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_WRITE_FILLER_SUPPORTED) || \ - defined(PNG_READ_STRIP_ALPHA_SUPPORTED) -PNG_EXTERN void png_do_strip_filler PNGARG((png_row_infop row_info, - png_bytep row, png_uint_32 flags)); -#endif - -#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) -PNG_EXTERN void png_do_swap PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED) -PNG_EXTERN void png_do_packswap PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) -PNG_EXTERN int png_do_rgb_to_gray PNGARG((png_structp png_ptr, png_row_infop - row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) -PNG_EXTERN void png_do_gray_to_rgb PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_READ_PACK_SUPPORTED) -PNG_EXTERN void png_do_unpack PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_SHIFT_SUPPORTED) -PNG_EXTERN void png_do_unshift PNGARG((png_row_infop row_info, png_bytep row, - png_color_8p sig_bits)); -#endif - -#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) -PNG_EXTERN void png_do_invert PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_16_TO_8_SUPPORTED) -PNG_EXTERN void png_do_chop PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_DITHER_SUPPORTED) -PNG_EXTERN void png_do_dither PNGARG((png_row_infop row_info, - png_bytep row, png_bytep palette_lookup, png_bytep dither_lookup)); - -# if defined(PNG_CORRECT_PALETTE_SUPPORTED) -PNG_EXTERN void png_correct_palette PNGARG((png_structp png_ptr, - png_colorp palette, int num_palette)); -# endif -#endif - -#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) -PNG_EXTERN void png_do_bgr PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_WRITE_PACK_SUPPORTED) -PNG_EXTERN void png_do_pack PNGARG((png_row_infop row_info, - png_bytep row, png_uint_32 bit_depth)); -#endif - -#if defined(PNG_WRITE_SHIFT_SUPPORTED) -PNG_EXTERN void png_do_shift PNGARG((png_row_infop row_info, png_bytep row, - png_color_8p bit_depth)); -#endif - -#if defined(PNG_READ_BACKGROUND_SUPPORTED) -#if defined(PNG_READ_GAMMA_SUPPORTED) -PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row, - png_color_16p trans_values, png_color_16p background, - png_color_16p background_1, - png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1, - png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1, - png_uint_16pp gamma_16_to_1, int gamma_shift)); -#else -PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row, - png_color_16p trans_values, png_color_16p background)); -#endif -#endif - -#if defined(PNG_READ_GAMMA_SUPPORTED) -PNG_EXTERN void png_do_gamma PNGARG((png_row_infop row_info, png_bytep row, - png_bytep gamma_table, png_uint_16pp gamma_16_table, - int gamma_shift)); -#endif - -#if defined(PNG_READ_EXPAND_SUPPORTED) -PNG_EXTERN void png_do_expand_palette PNGARG((png_row_infop row_info, - png_bytep row, png_colorp palette, png_bytep trans, int num_trans)); -PNG_EXTERN void png_do_expand PNGARG((png_row_infop row_info, - png_bytep row, png_color_16p trans_value)); -#endif - -/* The following decodes the appropriate chunks, and does error correction, - * then calls the appropriate callback for the chunk if it is valid. - */ - -/* decode the IHDR chunk */ -PNG_EXTERN void png_handle_IHDR PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -PNG_EXTERN void png_handle_PLTE PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -PNG_EXTERN void png_handle_IEND PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); - -#if defined(PNG_READ_bKGD_SUPPORTED) -PNG_EXTERN void png_handle_bKGD PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_cHRM_SUPPORTED) -PNG_EXTERN void png_handle_cHRM PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_gAMA_SUPPORTED) -PNG_EXTERN void png_handle_gAMA PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_hIST_SUPPORTED) -PNG_EXTERN void png_handle_hIST PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_iCCP_SUPPORTED) -extern void png_handle_iCCP PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif /* PNG_READ_iCCP_SUPPORTED */ - -#if defined(PNG_READ_iTXt_SUPPORTED) -PNG_EXTERN void png_handle_iTXt PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_oFFs_SUPPORTED) -PNG_EXTERN void png_handle_oFFs PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_pCAL_SUPPORTED) -PNG_EXTERN void png_handle_pCAL PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_pHYs_SUPPORTED) -PNG_EXTERN void png_handle_pHYs PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_sBIT_SUPPORTED) -PNG_EXTERN void png_handle_sBIT PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_sCAL_SUPPORTED) -PNG_EXTERN void png_handle_sCAL PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_sPLT_SUPPORTED) -extern void png_handle_sPLT PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif /* PNG_READ_sPLT_SUPPORTED */ - -#if defined(PNG_READ_sRGB_SUPPORTED) -PNG_EXTERN void png_handle_sRGB PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_tEXt_SUPPORTED) -PNG_EXTERN void png_handle_tEXt PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_tIME_SUPPORTED) -PNG_EXTERN void png_handle_tIME PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_tRNS_SUPPORTED) -PNG_EXTERN void png_handle_tRNS PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_zTXt_SUPPORTED) -PNG_EXTERN void png_handle_zTXt PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 length)); - -PNG_EXTERN void png_check_chunk_name PNGARG((png_structp png_ptr, - png_bytep chunk_name)); - -/* handle the transformations for reading and writing */ -PNG_EXTERN void png_do_read_transformations PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_do_write_transformations PNGARG((png_structp png_ptr)); - -PNG_EXTERN void png_init_read_transformations PNGARG((png_structp png_ptr)); - -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -PNG_EXTERN void png_push_read_chunk PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_push_read_sig PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_push_check_crc PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_push_crc_skip PNGARG((png_structp png_ptr, - png_uint_32 length)); -PNG_EXTERN void png_push_crc_finish PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_push_save_buffer PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_push_restore_buffer PNGARG((png_structp png_ptr, - png_bytep buffer, png_size_t buffer_length)); -PNG_EXTERN void png_push_read_IDAT PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_process_IDAT_data PNGARG((png_structp png_ptr, - png_bytep buffer, png_size_t buffer_length)); -PNG_EXTERN void png_push_process_row PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_push_handle_unknown PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 length)); -PNG_EXTERN void png_push_have_info PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_push_have_end PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_push_have_row PNGARG((png_structp png_ptr, png_bytep row)); -PNG_EXTERN void png_push_read_end PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_process_some_data PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_read_push_finish_row PNGARG((png_structp png_ptr)); -#if defined(PNG_READ_tEXt_SUPPORTED) -PNG_EXTERN void png_push_handle_tEXt PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 length)); -PNG_EXTERN void png_push_read_tEXt PNGARG((png_structp png_ptr, - png_infop info_ptr)); -#endif -#if defined(PNG_READ_zTXt_SUPPORTED) -PNG_EXTERN void png_push_handle_zTXt PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 length)); -PNG_EXTERN void png_push_read_zTXt PNGARG((png_structp png_ptr, - png_infop info_ptr)); -#endif -#if defined(PNG_READ_iTXt_SUPPORTED) -PNG_EXTERN void png_push_handle_iTXt PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 length)); -PNG_EXTERN void png_push_read_iTXt PNGARG((png_structp png_ptr, - png_infop info_ptr)); -#endif - -#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ - -#ifdef PNG_MNG_FEATURES_SUPPORTED -PNG_EXTERN void png_do_read_intrapixel PNGARG((png_row_infop row_info, - png_bytep row)); -PNG_EXTERN void png_do_write_intrapixel PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) -#if defined(PNG_MMX_CODE_SUPPORTED) -/* png.c */ /* PRIVATE */ -PNG_EXTERN void png_init_mmx_flags PNGARG((png_structp png_ptr)); -#endif -#endif - -#if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED) -PNG_EXTERN png_uint_32 png_get_pixels_per_inch PNGARG((png_structp png_ptr, -png_infop info_ptr)); - -PNG_EXTERN png_uint_32 png_get_x_pixels_per_inch PNGARG((png_structp png_ptr, -png_infop info_ptr)); - -PNG_EXTERN png_uint_32 png_get_y_pixels_per_inch PNGARG((png_structp png_ptr, -png_infop info_ptr)); - -PNG_EXTERN float png_get_x_offset_inches PNGARG((png_structp png_ptr, -png_infop info_ptr)); - -PNG_EXTERN float png_get_y_offset_inches PNGARG((png_structp png_ptr, -png_infop info_ptr)); - -#if defined(PNG_pHYs_SUPPORTED) -PNG_EXTERN png_uint_32 png_get_pHYs_dpi PNGARG((png_structp png_ptr, -png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); -#endif /* PNG_pHYs_SUPPORTED */ -#endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */ - -/* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */ - -#endif /* PNG_INTERNAL */ #ifdef __cplusplus } #endif #endif /* PNG_VERSION_INFO_ONLY */ -/* do not put anything past this line */ +/* Do not put anything past this line */ #endif /* PNG_H */ diff --git a/extlib/libpng/pngconf.h b/extlib/libpng/pngconf.h index d1e2995..bbb547f 100644 --- a/extlib/libpng/pngconf.h +++ b/extlib/libpng/pngconf.h @@ -1,11 +1,16 @@ /* pngconf.h - machine configurable file for libpng * - * libpng version 1.2.29 - May 8, 2008 - * For conditions of distribution and use, see copyright notice in png.h - * Copyright (c) 1998-2008 Glenn Randers-Pehrson + * libpng version 1.5.10 - March 29, 2012 + * + * 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.) + * + * This code is released under the libpng license. + * For conditions of distribution and use, see the disclaimer + * and license in png.h + * */ /* Any machine specific code is near the front of this file, so if you @@ -17,252 +22,57 @@ #ifndef PNGCONF_H #define PNGCONF_H -#define PNG_1_2_X - -/* - * PNG_USER_CONFIG has to be defined on the compiler command line. This - * includes the resource compiler for Windows DLL configurations. +#ifndef PNG_BUILDING_SYMBOL_TABLE +/* PNG_NO_LIMITS_H may be used to turn off the use of the standard C + * definition file for machine specific limits, this may impact the + * correctness of the definitons below (see uses of INT_MAX). */ -#ifdef PNG_USER_CONFIG -# ifndef PNG_USER_PRIVATEBUILD -# define PNG_USER_PRIVATEBUILD +# ifndef PNG_NO_LIMITS_H +# include # endif -#include "pngusr.h" -#endif -/* PNG_CONFIGURE_LIBPNG is set by the "configure" script. */ -#ifdef PNG_CONFIGURE_LIBPNG -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#endif - -/* - * Added at libpng-1.2.8 - * - * If you create a private DLL you need to define in "pngusr.h" the followings: - * #define PNG_USER_PRIVATEBUILD - * e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons." - * #define PNG_USER_DLLFNAME_POSTFIX - * e.g. // private DLL "libpng13gx.dll" - * #define PNG_USER_DLLFNAME_POSTFIX "gx" - * - * The following macros are also at your disposal if you want to complete the - * DLL VERSIONINFO structure. - * - PNG_USER_VERSIONINFO_COMMENTS - * - PNG_USER_VERSIONINFO_COMPANYNAME - * - PNG_USER_VERSIONINFO_LEGALTRADEMARKS +/* For the memory copy APIs (i.e. the standard definitions of these), + * because this file defines png_memcpy and so on the base APIs must + * be defined here. */ - -#ifdef __STDC__ -#ifdef SPECIALBUILD -# pragma message("PNG_LIBPNG_SPECIALBUILD (and deprecated SPECIALBUILD)\ - are now LIBPNG reserved macros. Use PNG_USER_PRIVATEBUILD instead.") -#endif - -#ifdef PRIVATEBUILD -# pragma message("PRIVATEBUILD is deprecated.\ - Use PNG_USER_PRIVATEBUILD instead.") -# define PNG_USER_PRIVATEBUILD PRIVATEBUILD -#endif -#endif /* __STDC__ */ - -#ifndef PNG_VERSION_INFO_ONLY - -/* End of material added to libpng-1.2.8 */ - -/* Added at libpng-1.2.19, removed at libpng-1.2.20 because it caused trouble - Restored at libpng-1.2.21 */ -#if !defined(PNG_NO_WARN_UNINITIALIZED_ROW) && \ - !defined(PNG_WARN_UNINITIALIZED_ROW) -# define PNG_WARN_UNINITIALIZED_ROW 1 -#endif -/* End of material added at libpng-1.2.19/1.2.21 */ - -/* 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 - * is full, it writes the data to the disk, and does some other - * calculations. Making this an extremely small size will slow - * the library down, but you may want to experiment to determine - * where it becomes significant, if you are concerned with memory - * usage. Note that zlib allocates at least 32Kb also. For readers, - * this describes the size of the buffer available to read the data in. - * Unless this gets smaller than the size of a row (compressed), - * it should not make much difference how big this is. - */ - -#ifndef PNG_ZBUF_SIZE -# define PNG_ZBUF_SIZE 8192 -#endif - -/* Enable if you want a write-only libpng */ - -#ifndef PNG_NO_READ_SUPPORTED -# define PNG_READ_SUPPORTED -#endif - -/* Enable if you want a read-only libpng */ - -#ifndef PNG_NO_WRITE_SUPPORTED -# define PNG_WRITE_SUPPORTED -#endif - -/* Enabled by default in 1.2.0. You can disable this if you don't need to - support PNGs that are embedded in MNG datastreams */ -#if !defined(PNG_1_0_X) && !defined(PNG_NO_MNG_FEATURES) -# ifndef PNG_MNG_FEATURES_SUPPORTED -# define PNG_MNG_FEATURES_SUPPORTED -# endif -#endif - -#ifndef PNG_NO_FLOATING_POINT_SUPPORTED -# ifndef PNG_FLOATING_POINT_SUPPORTED -# define PNG_FLOATING_POINT_SUPPORTED -# endif -#endif - -/* If you are running on a machine where you cannot allocate more - * than 64K of memory at once, uncomment this. While libpng will not - * normally need that much memory in a chunk (unless you load up a very - * large file), zlib needs to know how big of a chunk it can use, and - * libpng thus makes sure to check any memory allocation to verify it - * will fit into memory. -#define PNG_MAX_MALLOC_64K - */ -#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K) -# define PNG_MAX_MALLOC_64K -#endif - -/* Special munging to support doing things the 'cygwin' way: - * 'Normal' png-on-win32 defines/defaults: - * PNG_BUILD_DLL -- building dll - * PNG_USE_DLL -- building an application, linking to dll - * (no define) -- building static library, or building an - * application and linking to the static lib - * 'Cygwin' defines/defaults: - * PNG_BUILD_DLL -- (ignored) building the dll - * (no define) -- (ignored) building an application, linking to the dll - * PNG_STATIC -- (ignored) building the static lib, or building an - * application that links to the static lib. - * ALL_STATIC -- (ignored) building various static libs, or building an - * application that links to the static libs. - * Thus, - * a cygwin user should define either PNG_BUILD_DLL or PNG_STATIC, and - * this bit of #ifdefs will define the 'correct' config variables based on - * that. If a cygwin user *wants* to define 'PNG_USE_DLL' that's okay, but - * unnecessary. - * - * Also, the precedence order is: - * ALL_STATIC (since we can't #undef something outside our namespace) - * PNG_BUILD_DLL - * PNG_STATIC - * (nothing) == PNG_USE_DLL - * - * CYGWIN (2002-01-20): The preceding is now obsolete. With the advent - * of auto-import in binutils, we no longer need to worry about - * __declspec(dllexport) / __declspec(dllimport) and friends. Therefore, - * we don't need to worry about PNG_STATIC or ALL_STATIC when it comes - * to __declspec() stuff. However, we DO need to worry about - * PNG_BUILD_DLL and PNG_STATIC because those change some defaults - * such as CONSOLE_IO and whether GLOBAL_ARRAYS are allowed. - */ -#if defined(__CYGWIN__) -# if defined(ALL_STATIC) -# if defined(PNG_BUILD_DLL) -# undef PNG_BUILD_DLL -# endif -# if defined(PNG_USE_DLL) -# undef PNG_USE_DLL -# endif -# if defined(PNG_DLL) -# undef PNG_DLL -# endif -# if !defined(PNG_STATIC) -# define PNG_STATIC -# endif +# ifdef BSD +# include # else -# if defined (PNG_BUILD_DLL) -# if defined(PNG_STATIC) -# undef PNG_STATIC -# endif -# if defined(PNG_USE_DLL) -# undef PNG_USE_DLL -# endif -# if !defined(PNG_DLL) -# define PNG_DLL -# endif -# else -# if defined(PNG_STATIC) -# if defined(PNG_USE_DLL) -# undef PNG_USE_DLL -# endif -# if defined(PNG_DLL) -# undef PNG_DLL -# endif -# else -# if !defined(PNG_USE_DLL) -# define PNG_USE_DLL -# endif -# if !defined(PNG_DLL) -# define PNG_DLL -# endif -# endif -# endif +# include +# endif + +/* For png_FILE_p - this provides the standard definition of a + * FILE + */ +# ifdef PNG_STDIO_SUPPORTED +# include # endif #endif -/* This protects us against compilers that run on a windowing system - * and thus don't have or would rather us not use the stdio types: - * stdin, stdout, and stderr. The only one currently used is stderr - * in png_error() and png_warning(). #defining PNG_NO_CONSOLE_IO will - * prevent these from being compiled and used. #defining PNG_NO_STDIO - * will also prevent these, plus will prevent the entire set of stdio - * macros and functions (FILE *, printf, etc.) from being compiled and used, - * unless (PNG_DEBUG > 0) has been #defined. +/* This controls optimization of the reading of 16 and 32 bit values + * from PNG files. It can be set on a per-app-file basis - it + * just changes whether a macro is used when the function is called. + * The library builder sets the default; if read functions are not + * built into the library the macro implementation is forced on. + */ +#ifndef PNG_READ_INT_FUNCTIONS_SUPPORTED +# define PNG_USE_READ_MACROS +#endif +#if !defined(PNG_NO_USE_READ_MACROS) && !defined(PNG_USE_READ_MACROS) +# if PNG_DEFAULT_READ_MACROS +# define PNG_USE_READ_MACROS +# endif +#endif + +/* COMPILER SPECIFIC OPTIONS. * - * #define PNG_NO_CONSOLE_IO - * #define PNG_NO_STDIO + * These options are provided so that a variety of difficult compilers + * can be used. Some are fixed at build time (e.g. PNG_API_RULE + * below) but still have compiler specific implementations, others + * may be changed on a per-file basis when compiling against libpng. */ -#if defined(_WIN32_WCE) -# include - /* Console I/O functions are not supported on WindowsCE */ -# define PNG_NO_CONSOLE_IO -# ifdef PNG_DEBUG -# undef PNG_DEBUG -# endif -#endif - -#ifdef PNG_BUILD_DLL -# ifndef PNG_CONSOLE_IO_SUPPORTED -# ifndef PNG_NO_CONSOLE_IO -# define PNG_NO_CONSOLE_IO -# endif -# endif -#endif - -# ifdef PNG_NO_STDIO -# ifndef PNG_NO_CONSOLE_IO -# define PNG_NO_CONSOLE_IO -# endif -# ifdef PNG_DEBUG -# if (PNG_DEBUG > 0) -# include -# endif -# endif -# else -# if !defined(_WIN32_WCE) -/* "stdio.h" functions are not supported on WindowsCE */ -# include -# endif -# endif - -/* This macro protects us against machines that don't have function +/* The PNGARG macro protects us against machines that don't have function * prototypes (ie K&R style headers). If your compiler does not handle * function prototypes, define this macro and use the included ansi2knr. * I've always been able to use _NO_PROTO as the indicator, but you may @@ -271,836 +81,351 @@ */ #ifndef PNGARG -#ifdef OF /* zlib prototype munger */ -# define PNGARG(arglist) OF(arglist) -#else +# ifdef OF /* zlib prototype munger */ +# define PNGARG(arglist) OF(arglist) +# else -#ifdef _NO_PROTO -# define PNGARG(arglist) () -# ifndef PNG_TYPECAST_NULL -# define PNG_TYPECAST_NULL -# endif -#else -# define PNGARG(arglist) arglist -#endif /* _NO_PROTO */ +# ifdef _NO_PROTO +# define PNGARG(arglist) () +# else +# define PNGARG(arglist) arglist +# endif /* _NO_PROTO */ - -#endif /* OF */ +# endif /* OF */ #endif /* PNGARG */ -/* Try to determine if we are compiling on a Mac. Note that testing for - * just __MWERKS__ is not good enough, because the Codewarrior is now used - * on non-Mac platforms. +/* Function calling conventions. + * ============================= + * Normally it is not necessary to specify to the compiler how to call + * a function - it just does it - however on x86 systems derived from + * Microsoft and Borland C compilers ('IBM PC', 'DOS', 'Windows' systems + * and some others) there are multiple ways to call a function and the + * default can be changed on the compiler command line. For this reason + * libpng specifies the calling convention of every exported function and + * every function called via a user supplied function pointer. This is + * done in this file by defining the following macros: + * + * PNGAPI Calling convention for exported functions. + * PNGCBAPI Calling convention for user provided (callback) functions. + * PNGCAPI Calling convention used by the ANSI-C library (required + * for longjmp callbacks and sometimes used internally to + * specify the calling convention for zlib). + * + * These macros should never be overridden. If it is necessary to + * change calling convention in a private build this can be done + * by setting PNG_API_RULE (which defaults to 0) to one of the values + * below to select the correct 'API' variants. + * + * PNG_API_RULE=0 Use PNGCAPI - the 'C' calling convention - throughout. + * This is correct in every known environment. + * PNG_API_RULE=1 Use the operating system convention for PNGAPI and + * the 'C' calling convention (from PNGCAPI) for + * callbacks (PNGCBAPI). This is no longer required + * in any known environment - if it has to be used + * please post an explanation of the problem to the + * libpng mailing list. + * + * These cases only differ if the operating system does not use the C + * calling convention, at present this just means the above cases + * (x86 DOS/Windows sytems) and, even then, this does not apply to + * Cygwin running on those systems. + * + * Note that the value must be defined in pnglibconf.h so that what + * the application uses to call the library matches the conventions + * set when building the library. */ -#ifndef MACOS -# if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \ - defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC) -# define MACOS + +/* Symbol export + * ============= + * When building a shared library it is almost always necessary to tell + * the compiler which symbols to export. The png.h macro 'PNG_EXPORT' + * is used to mark the symbols. On some systems these symbols can be + * extracted at link time and need no special processing by the compiler, + * on other systems the symbols are flagged by the compiler and just + * the declaration requires a special tag applied (unfortunately) in a + * compiler dependent way. Some systems can do either. + * + * A small number of older systems also require a symbol from a DLL to + * be flagged to the program that calls it. This is a problem because + * we do not know in the header file included by application code that + * the symbol will come from a shared library, as opposed to a statically + * linked one. For this reason the application must tell us by setting + * the magic flag PNG_USE_DLL to turn on the special processing before + * it includes png.h. + * + * Four additional macros are used to make this happen: + * + * PNG_IMPEXP The magic (if any) to cause a symbol to be exported from + * the build or imported if PNG_USE_DLL is set - compiler + * and system specific. + * + * PNG_EXPORT_TYPE(type) A macro that pre or appends PNG_IMPEXP to + * 'type', compiler specific. + * + * PNG_DLL_EXPORT Set to the magic to use during a libpng build to + * make a symbol exported from the DLL. Not used in the + * public header files; see pngpriv.h for how it is used + * in the libpng build. + * + * PNG_DLL_IMPORT Set to the magic to force the libpng symbols to come + * from a DLL - used to define PNG_IMPEXP when + * PNG_USE_DLL is set. + */ + +/* System specific discovery. + * ========================== + * This code is used at build time to find PNG_IMPEXP, the API settings + * and PNG_EXPORT_TYPE(), it may also set a macro to indicate the DLL + * import processing is possible. On Windows/x86 systems it also sets + * compiler-specific macros to the values required to change the calling + * conventions of the various functions. + */ +#if ( defined(_Windows) || defined(_WINDOWS) || defined(WIN32) ||\ + defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) ) &&\ + ( defined(_X86_) || defined(_X64_) || defined(_M_IX86) ||\ + defined(_M_X64) || defined(_M_IA64) ) + /* Windows system (DOS doesn't support DLLs) running on x86/x64. Includes + * builds under Cygwin or MinGW. Also includes Watcom builds but these need + * special treatment because they are not compatible with GCC or Visual C + * because of different calling conventions. + */ +# if PNG_API_RULE == 2 + /* If this line results in an error, either because __watcall is not + * understood or because of a redefine just below you cannot use *this* + * build of the library with the compiler you are using. *This* build was + * build using Watcom and applications must also be built using Watcom! + */ +# define PNGCAPI __watcall # endif -#endif -/* enough people need this for various reasons to include it here */ -#if !defined(MACOS) && !defined(RISCOS) && !defined(_WIN32_WCE) -# include -#endif - -#if !defined(PNG_SETJMP_NOT_SUPPORTED) && !defined(PNG_NO_SETJMP_SUPPORTED) -# define PNG_SETJMP_SUPPORTED -#endif - -#ifdef PNG_SETJMP_SUPPORTED -/* This is an attempt to force a single setjmp behaviour on Linux. If - * the X config stuff didn't define _BSD_SOURCE we wouldn't need this. - */ - -# ifdef __linux__ -# ifdef _BSD_SOURCE -# define PNG_SAVE_BSD_SOURCE -# undef _BSD_SOURCE -# endif -# ifdef _SETJMP_H - /* If you encounter a compiler error here, see the explanation - * near the end of INSTALL. - */ - __pngconf.h__ already includes setjmp.h; - __dont__ include it again.; -# endif -# endif /* __linux__ */ - - /* include setjmp.h for error handling */ -# include - -# ifdef __linux__ -# ifdef PNG_SAVE_BSD_SOURCE -# ifndef _BSD_SOURCE -# define _BSD_SOURCE -# endif -# undef PNG_SAVE_BSD_SOURCE -# endif -# endif /* __linux__ */ -#endif /* PNG_SETJMP_SUPPORTED */ - -#ifdef BSD -# include -#else -# include -#endif - -/* Other defines for things like memory and the like can go here. */ -#ifdef PNG_INTERNAL - -#include - -/* The functions exported by PNG_EXTERN are PNG_INTERNAL functions, which - * aren't usually used outside the library (as far as I know), so it is - * debatable if they should be exported at all. In the future, when it is - * possible to have run-time registry of chunk-handling functions, some of - * these will be made available again. -#define PNG_EXTERN extern - */ -#define PNG_EXTERN - -/* Other defines specific to compilers can go here. Try to keep - * them inside an appropriate ifdef/endif pair for portability. - */ - -#if defined(PNG_FLOATING_POINT_SUPPORTED) -# if defined(MACOS) - /* We need to check that hasn't already been included earlier - * as it seems it doesn't agree with , yet we should really use - * if possible. - */ -# if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__) -# include +# if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800)) +# define PNGCAPI __cdecl +# if PNG_API_RULE == 1 +# define PNGAPI __stdcall # endif # else -# include + /* An older compiler, or one not detected (erroneously) above, + * if necessary override on the command line to get the correct + * variants for the compiler. + */ +# ifndef PNGCAPI +# define PNGCAPI _cdecl +# endif +# if PNG_API_RULE == 1 && !defined(PNGAPI) +# define PNGAPI _stdcall +# endif +# endif /* compiler/api */ + /* NOTE: PNGCBAPI always defaults to PNGCAPI. */ + +# if defined(PNGAPI) && !defined(PNG_USER_PRIVATEBUILD) + ERROR: PNG_USER_PRIVATEBUILD must be defined if PNGAPI is changed # endif -# if defined(_AMIGA) && defined(__SASC) && defined(_M68881) - /* Amiga SAS/C: We must include builtin FPU functions when compiling using - * MATH=68881 - */ -# include + +# if (defined(_MSC_VER) && _MSC_VER < 800) ||\ + (defined(__BORLANDC__) && __BORLANDC__ < 0x500) + /* older Borland and MSC + * compilers used '__export' and required this to be after + * the type. + */ +# ifndef PNG_EXPORT_TYPE +# define PNG_EXPORT_TYPE(type) type PNG_IMPEXP +# endif +# define PNG_DLL_EXPORT __export +# else /* newer compiler */ +# define PNG_DLL_EXPORT __declspec(dllexport) +# ifndef PNG_DLL_IMPORT +# define PNG_DLL_IMPORT __declspec(dllimport) +# endif +# endif /* compiler */ + +#else /* !Windows/x86 */ +# if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__) +# define PNGAPI _System +# else /* !Windows/x86 && !OS/2 */ + /* Use the defaults, or define PNG*API on the command line (but + * this will have to be done for every compile!) + */ +# endif /* other system, !OS/2 */ +#endif /* !Windows/x86 */ + +/* Now do all the defaulting . */ +#ifndef PNGCAPI +# define PNGCAPI +#endif +#ifndef PNGCBAPI +# define PNGCBAPI PNGCAPI +#endif +#ifndef PNGAPI +# define PNGAPI PNGCAPI +#endif + +/* PNG_IMPEXP may be set on the compilation system command line or (if not set) + * then in an internal header file when building the library, otherwise (when + * using the library) it is set here. + */ +#ifndef PNG_IMPEXP +# if defined(PNG_USE_DLL) && defined(PNG_DLL_IMPORT) + /* This forces use of a DLL, disallowing static linking */ +# define PNG_IMPEXP PNG_DLL_IMPORT +# endif + +# ifndef PNG_IMPEXP +# define PNG_IMPEXP # endif #endif -/* Codewarrior on NT has linking problems without this. */ -#if (defined(__MWERKS__) && defined(WIN32)) || defined(__STDC__) -# define PNG_ALWAYS_EXTERN -#endif - -/* This provides the non-ANSI (far) memory allocation routines. */ -#if defined(__TURBOC__) && defined(__MSDOS__) -# include -# include -#endif - -/* I have no idea why is this necessary... */ -#if defined(_MSC_VER) && (defined(WIN32) || defined(_Windows) || \ - defined(_WINDOWS) || defined(_WIN32) || defined(__WIN32__)) -# include -#endif - -/* This controls how fine the dithering gets. As this allocates - * a largish chunk of memory (32K), those who are not as concerned - * with dithering quality can decrease some or all of these. +/* In 1.5.2 the definition of PNG_FUNCTION has been changed to always treat + * 'attributes' as a storage class - the attributes go at the start of the + * function definition, and attributes are always appended regardless of the + * compiler. This considerably simplifies these macros but may cause problems + * if any compilers both need function attributes and fail to handle them as + * a storage class (this is unlikely.) */ -#ifndef PNG_DITHER_RED_BITS -# define PNG_DITHER_RED_BITS 5 -#endif -#ifndef PNG_DITHER_GREEN_BITS -# define PNG_DITHER_GREEN_BITS 5 -#endif -#ifndef PNG_DITHER_BLUE_BITS -# define PNG_DITHER_BLUE_BITS 5 +#ifndef PNG_FUNCTION +# define PNG_FUNCTION(type, name, args, attributes) attributes type name args #endif -/* This controls how fine the gamma correction becomes when you - * are only interested in 8 bits anyway. Increasing this value - * results in more memory being used, and more pow() functions - * being called to fill in the gamma tables. Don't set this value - * less then 8, and even that may not work (I haven't tested it). +#ifndef PNG_EXPORT_TYPE +# define PNG_EXPORT_TYPE(type) PNG_IMPEXP type +#endif + + /* The ordinal value is only relevant when preprocessing png.h for symbol + * table entries, so we discard it here. See the .dfn files in the + * scripts directory. + */ +#ifndef PNG_EXPORTA + +# define PNG_EXPORTA(ordinal, type, name, args, attributes)\ + PNG_FUNCTION(PNG_EXPORT_TYPE(type),(PNGAPI name),PNGARG(args), \ + extern attributes) +#endif + +/* ANSI-C (C90) does not permit a macro to be invoked with an empty argument, + * so make something non-empty to satisfy the requirement: + */ +#define PNG_EMPTY /*empty list*/ + +#define PNG_EXPORT(ordinal, type, name, args)\ + PNG_EXPORTA(ordinal, type, name, args, PNG_EMPTY) + +/* Use PNG_REMOVED to comment out a removed interface. */ +#ifndef PNG_REMOVED +# define PNG_REMOVED(ordinal, type, name, args, attributes) +#endif + +#ifndef PNG_CALLBACK +# define PNG_CALLBACK(type, name, args) type (PNGCBAPI name) PNGARG(args) +#endif + +/* Support for compiler specific function attributes. These are used + * so that where compiler support is available incorrect use of API + * functions in png.h will generate compiler warnings. + * + * Added at libpng-1.2.41. */ -#ifndef PNG_MAX_GAMMA_8 -# define PNG_MAX_GAMMA_8 11 +#ifndef PNG_NO_PEDANTIC_WARNINGS +# ifndef PNG_PEDANTIC_WARNINGS_SUPPORTED +# define PNG_PEDANTIC_WARNINGS_SUPPORTED +# endif #endif -/* This controls how much a difference in gamma we can tolerate before - * we actually start doing gamma conversion. - */ -#ifndef PNG_GAMMA_THRESHOLD -# define PNG_GAMMA_THRESHOLD 0.05 -#endif +#ifdef PNG_PEDANTIC_WARNINGS_SUPPORTED + /* Support for compiler specific function attributes. These are used + * so that where compiler support is available incorrect use of API + * functions in png.h will generate compiler warnings. Added at libpng + * version 1.2.41. + */ +# if defined(__GNUC__) +# ifndef PNG_USE_RESULT +# define PNG_USE_RESULT __attribute__((__warn_unused_result__)) +# endif +# ifndef PNG_NORETURN +# define PNG_NORETURN __attribute__((__noreturn__)) +# endif +# ifndef PNG_ALLOCATED +# define PNG_ALLOCATED __attribute__((__malloc__)) +# endif +# ifndef PNG_DEPRECATED +# define PNG_DEPRECATED __attribute__((__deprecated__)) +# endif +# ifndef PNG_PRIVATE +# if 0 /* Doesn't work so we use deprecated instead*/ +# define PNG_PRIVATE \ + __attribute__((warning("This function is not exported by libpng."))) +# else +# define PNG_PRIVATE \ + __attribute__((__deprecated__)) +# endif +# endif +# endif /* __GNUC__ */ -#endif /* PNG_INTERNAL */ +# if defined(_MSC_VER) && (_MSC_VER >= 1300) +# ifndef PNG_USE_RESULT +# define PNG_USE_RESULT /* not supported */ +# endif +# ifndef PNG_NORETURN +# define PNG_NORETURN __declspec(noreturn) +# endif +# ifndef PNG_ALLOCATED +# if (_MSC_VER >= 1400) +# define PNG_ALLOCATED __declspec(restrict) +# endif +# endif +# ifndef PNG_DEPRECATED +# define PNG_DEPRECATED __declspec(deprecated) +# endif +# ifndef PNG_PRIVATE +# define PNG_PRIVATE __declspec(deprecated) +# endif +# endif /* _MSC_VER */ +#endif /* PNG_PEDANTIC_WARNINGS */ + +#ifndef PNG_DEPRECATED +# define PNG_DEPRECATED /* Use of this function is deprecated */ +#endif +#ifndef PNG_USE_RESULT +# define PNG_USE_RESULT /* The result of this function must be checked */ +#endif +#ifndef PNG_NORETURN +# define PNG_NORETURN /* This function does not return */ +#endif +#ifndef PNG_ALLOCATED +# define PNG_ALLOCATED /* The result of the function is new memory */ +#endif +#ifndef PNG_PRIVATE +# define PNG_PRIVATE /* This is a private libpng function */ +#endif +#ifndef PNG_FP_EXPORT /* A floating point API. */ +# ifdef PNG_FLOATING_POINT_SUPPORTED +# define PNG_FP_EXPORT(ordinal, type, name, args)\ + PNG_EXPORT(ordinal, type, name, args) +# else /* No floating point APIs */ +# define PNG_FP_EXPORT(ordinal, type, name, args) +# endif +#endif +#ifndef PNG_FIXED_EXPORT /* A fixed point API. */ +# ifdef PNG_FIXED_POINT_SUPPORTED +# define PNG_FIXED_EXPORT(ordinal, type, name, args)\ + PNG_EXPORT(ordinal, type, name, args) +# else /* No fixed point APIs */ +# define PNG_FIXED_EXPORT(ordinal, type, name, args) +# endif +#endif /* The following uses const char * instead of char * for error * and warning message functions, so some compilers won't complain. * If you do not want to use const, define PNG_NO_CONST here. + * + * This should not change how the APIs are called, so it can be done + * on a per-file basis in the application. */ - -#ifndef PNG_NO_CONST -# define PNG_CONST const -#else -# define PNG_CONST -#endif - -/* The following defines give you the ability to remove code from the - * library that you will not be using. I wish I could figure out how to - * automate this, but I can't do that without making it seriously hard - * on the users. So if you are not using an ability, change the #define - * to and #undef, and that part of the library will not be compiled. If - * your linker can't find a function, you may want to make sure the - * ability is defined here. Some of these depend upon some others being - * defined. I haven't figured out all the interactions here, so you may - * have to experiment awhile to get everything to compile. If you are - * creating or using a shared library, you probably shouldn't touch this, - * as it will affect the size of the structures, and this will cause bad - * things to happen if the library and/or application ever change. - */ - -/* Any features you will not be using can be undef'ed here */ - -/* GR-P, 0.96a: Set "*TRANSFORMS_SUPPORTED as default but allow user - * to turn it off with "*TRANSFORMS_NOT_SUPPORTED" or *PNG_NO_*_TRANSFORMS - * on the compile line, then pick and choose which ones to define without - * having to edit this file. It is safe to use the *TRANSFORMS_NOT_SUPPORTED - * if you only want to have a png-compliant reader/writer but don't need - * any of the extra transformations. This saves about 80 kbytes in a - * typical installation of the library. (PNG_NO_* form added in version - * 1.0.1c, for consistency) - */ - -/* The size of the png_text structure changed in libpng-1.0.6 when - * iTXt support was added. iTXt support was turned off by default through - * libpng-1.2.x, to support old apps that malloc the png_text structure - * instead of calling png_set_text() and letting libpng malloc it. It - * was turned on by default in libpng-1.3.0. - */ - -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -# ifndef PNG_NO_iTXt_SUPPORTED -# define PNG_NO_iTXt_SUPPORTED -# endif -# ifndef PNG_NO_READ_iTXt -# define PNG_NO_READ_iTXt -# endif -# ifndef PNG_NO_WRITE_iTXt -# define PNG_NO_WRITE_iTXt -# endif -#endif - -#if !defined(PNG_NO_iTXt_SUPPORTED) -# if !defined(PNG_READ_iTXt_SUPPORTED) && !defined(PNG_NO_READ_iTXt) -# define PNG_READ_iTXt -# endif -# if !defined(PNG_WRITE_iTXt_SUPPORTED) && !defined(PNG_NO_WRITE_iTXt) -# define PNG_WRITE_iTXt -# endif -#endif - -/* The following support, added after version 1.0.0, can be turned off here en - * masse by defining PNG_LEGACY_SUPPORTED in case you need binary compatibility - * with old applications that require the length of png_struct and png_info - * to remain unchanged. - */ - -#ifdef PNG_LEGACY_SUPPORTED -# define PNG_NO_FREE_ME -# define PNG_NO_READ_UNKNOWN_CHUNKS -# define PNG_NO_WRITE_UNKNOWN_CHUNKS -# define PNG_NO_READ_USER_CHUNKS -# define PNG_NO_READ_iCCP -# define PNG_NO_WRITE_iCCP -# define PNG_NO_READ_iTXt -# define PNG_NO_WRITE_iTXt -# define PNG_NO_READ_sCAL -# define PNG_NO_WRITE_sCAL -# define PNG_NO_READ_sPLT -# define PNG_NO_WRITE_sPLT -# define PNG_NO_INFO_IMAGE -# define PNG_NO_READ_RGB_TO_GRAY -# define PNG_NO_READ_USER_TRANSFORM -# define PNG_NO_WRITE_USER_TRANSFORM -# define PNG_NO_USER_MEM -# define PNG_NO_READ_EMPTY_PLTE -# define PNG_NO_MNG_FEATURES -# define PNG_NO_FIXED_POINT_SUPPORTED -#endif - -/* Ignore attempt to turn off both floating and fixed point support */ -#if !defined(PNG_FLOATING_POINT_SUPPORTED) || \ - !defined(PNG_NO_FIXED_POINT_SUPPORTED) -# define PNG_FIXED_POINT_SUPPORTED -#endif - -#ifndef PNG_NO_FREE_ME -# define PNG_FREE_ME_SUPPORTED -#endif - -#if defined(PNG_READ_SUPPORTED) - -#if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \ - !defined(PNG_NO_READ_TRANSFORMS) -# define PNG_READ_TRANSFORMS_SUPPORTED -#endif - -#ifdef PNG_READ_TRANSFORMS_SUPPORTED -# ifndef PNG_NO_READ_EXPAND -# define PNG_READ_EXPAND_SUPPORTED -# endif -# ifndef PNG_NO_READ_SHIFT -# define PNG_READ_SHIFT_SUPPORTED -# endif -# ifndef PNG_NO_READ_PACK -# define PNG_READ_PACK_SUPPORTED -# endif -# ifndef PNG_NO_READ_BGR -# define PNG_READ_BGR_SUPPORTED -# endif -# ifndef PNG_NO_READ_SWAP -# define PNG_READ_SWAP_SUPPORTED -# endif -# ifndef PNG_NO_READ_PACKSWAP -# define PNG_READ_PACKSWAP_SUPPORTED -# endif -# ifndef PNG_NO_READ_INVERT -# define PNG_READ_INVERT_SUPPORTED -# endif -# ifndef PNG_NO_READ_DITHER -# define PNG_READ_DITHER_SUPPORTED -# endif -# ifndef PNG_NO_READ_BACKGROUND -# define PNG_READ_BACKGROUND_SUPPORTED -# endif -# ifndef PNG_NO_READ_16_TO_8 -# define PNG_READ_16_TO_8_SUPPORTED -# endif -# ifndef PNG_NO_READ_FILLER -# define PNG_READ_FILLER_SUPPORTED -# endif -# ifndef PNG_NO_READ_GAMMA -# define PNG_READ_GAMMA_SUPPORTED -# endif -# ifndef PNG_NO_READ_GRAY_TO_RGB -# define PNG_READ_GRAY_TO_RGB_SUPPORTED -# endif -# ifndef PNG_NO_READ_SWAP_ALPHA -# define PNG_READ_SWAP_ALPHA_SUPPORTED -# endif -# ifndef PNG_NO_READ_INVERT_ALPHA -# define PNG_READ_INVERT_ALPHA_SUPPORTED -# endif -# ifndef PNG_NO_READ_STRIP_ALPHA -# define PNG_READ_STRIP_ALPHA_SUPPORTED -# endif -# ifndef PNG_NO_READ_USER_TRANSFORM -# define PNG_READ_USER_TRANSFORM_SUPPORTED -# endif -# ifndef PNG_NO_READ_RGB_TO_GRAY -# define PNG_READ_RGB_TO_GRAY_SUPPORTED -# endif -#endif /* PNG_READ_TRANSFORMS_SUPPORTED */ - -#if !defined(PNG_NO_PROGRESSIVE_READ) && \ - !defined(PNG_PROGRESSIVE_READ_SUPPORTED) /* if you don't do progressive */ -# define PNG_PROGRESSIVE_READ_SUPPORTED /* reading. This is not talking */ -#endif /* about interlacing capability! You'll */ - /* still have interlacing unless you change the following line: */ - -#define PNG_READ_INTERLACING_SUPPORTED /* required in PNG-compliant decoders */ - -#ifndef PNG_NO_READ_COMPOSITE_NODIV -# ifndef PNG_NO_READ_COMPOSITED_NODIV /* libpng-1.0.x misspelling */ -# define PNG_READ_COMPOSITE_NODIV_SUPPORTED /* well tested on Intel, SGI */ -# endif -#endif - -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -/* Deprecated, will be removed from version 2.0.0. - Use PNG_MNG_FEATURES_SUPPORTED instead. */ -#ifndef PNG_NO_READ_EMPTY_PLTE -# define PNG_READ_EMPTY_PLTE_SUPPORTED -#endif -#endif - -#endif /* PNG_READ_SUPPORTED */ - -#if defined(PNG_WRITE_SUPPORTED) - -# if !defined(PNG_WRITE_TRANSFORMS_NOT_SUPPORTED) && \ - !defined(PNG_NO_WRITE_TRANSFORMS) -# define PNG_WRITE_TRANSFORMS_SUPPORTED -#endif - -#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED -# ifndef PNG_NO_WRITE_SHIFT -# define PNG_WRITE_SHIFT_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_PACK -# define PNG_WRITE_PACK_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_BGR -# define PNG_WRITE_BGR_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_SWAP -# define PNG_WRITE_SWAP_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_PACKSWAP -# define PNG_WRITE_PACKSWAP_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_INVERT -# define PNG_WRITE_INVERT_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_FILLER -# define PNG_WRITE_FILLER_SUPPORTED /* same as WRITE_STRIP_ALPHA */ -# endif -# ifndef PNG_NO_WRITE_SWAP_ALPHA -# define PNG_WRITE_SWAP_ALPHA_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_INVERT_ALPHA -# define PNG_WRITE_INVERT_ALPHA_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_USER_TRANSFORM -# define PNG_WRITE_USER_TRANSFORM_SUPPORTED -# endif -#endif /* PNG_WRITE_TRANSFORMS_SUPPORTED */ - -#if !defined(PNG_NO_WRITE_INTERLACING_SUPPORTED) && \ - !defined(PNG_WRITE_INTERLACING_SUPPORTED) -#define PNG_WRITE_INTERLACING_SUPPORTED /* not required for PNG-compliant - encoders, but can cause trouble - if left undefined */ -#endif - -#if !defined(PNG_NO_WRITE_WEIGHTED_FILTER) && \ - !defined(PNG_WRITE_WEIGHTED_FILTER) && \ - defined(PNG_FLOATING_POINT_SUPPORTED) -# define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED -#endif - -#ifndef PNG_NO_WRITE_FLUSH -# define PNG_WRITE_FLUSH_SUPPORTED -#endif - -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -/* Deprecated, see PNG_MNG_FEATURES_SUPPORTED, above */ -#ifndef PNG_NO_WRITE_EMPTY_PLTE -# define PNG_WRITE_EMPTY_PLTE_SUPPORTED -#endif -#endif - -#endif /* PNG_WRITE_SUPPORTED */ - -#ifndef PNG_1_0_X -# ifndef PNG_NO_ERROR_NUMBERS -# define PNG_ERROR_NUMBERS_SUPPORTED -# endif -#endif /* PNG_1_0_X */ - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) -# ifndef PNG_NO_USER_TRANSFORM_PTR -# define PNG_USER_TRANSFORM_PTR_SUPPORTED -# endif -#endif - -#ifndef PNG_NO_STDIO -# define PNG_TIME_RFC1123_SUPPORTED -#endif - -/* This adds extra functions in pngget.c for accessing data from the - * info pointer (added in version 0.99) - * png_get_image_width() - * png_get_image_height() - * png_get_bit_depth() - * png_get_color_type() - * png_get_compression_type() - * png_get_filter_type() - * png_get_interlace_type() - * png_get_pixel_aspect_ratio() - * png_get_pixels_per_meter() - * png_get_x_offset_pixels() - * png_get_y_offset_pixels() - * png_get_x_offset_microns() - * png_get_y_offset_microns() - */ -#if !defined(PNG_NO_EASY_ACCESS) && !defined(PNG_EASY_ACCESS_SUPPORTED) -# define PNG_EASY_ACCESS_SUPPORTED -#endif - -/* PNG_ASSEMBLER_CODE was enabled by default in version 1.2.0 - * and removed from version 1.2.20. The following will be removed - * from libpng-1.4.0 -*/ - -#if defined(PNG_READ_SUPPORTED) && !defined(PNG_NO_OPTIMIZED_CODE) -# ifndef PNG_OPTIMIZED_CODE_SUPPORTED -# define PNG_OPTIMIZED_CODE_SUPPORTED -# endif -#endif - -#if defined(PNG_READ_SUPPORTED) && !defined(PNG_NO_ASSEMBLER_CODE) -# ifndef PNG_ASSEMBLER_CODE_SUPPORTED -# define PNG_ASSEMBLER_CODE_SUPPORTED -# endif - -# if defined(__GNUC__) && defined(__x86_64__) && (__GNUC__ < 4) - /* work around 64-bit gcc compiler bugs in gcc-3.x */ -# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE) -# define PNG_NO_MMX_CODE -# endif -# endif - -# if defined(__APPLE__) -# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE) -# define PNG_NO_MMX_CODE -# endif -# endif - -# if (defined(__MWERKS__) && ((__MWERKS__ < 0x0900) || macintosh)) -# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE) -# define PNG_NO_MMX_CODE -# endif -# endif - -# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE) -# define PNG_MMX_CODE_SUPPORTED -# endif - -#endif -/* end of obsolete code to be removed from libpng-1.4.0 */ - -#if !defined(PNG_1_0_X) -#if !defined(PNG_NO_USER_MEM) && !defined(PNG_USER_MEM_SUPPORTED) -# define PNG_USER_MEM_SUPPORTED -#endif -#endif /* PNG_1_0_X */ - -/* Added at libpng-1.2.6 */ -#if !defined(PNG_1_0_X) -#ifndef PNG_SET_USER_LIMITS_SUPPORTED -#if !defined(PNG_NO_SET_USER_LIMITS) && !defined(PNG_SET_USER_LIMITS_SUPPORTED) -# define PNG_SET_USER_LIMITS_SUPPORTED -#endif -#endif -#endif /* PNG_1_0_X */ - -/* Added at libpng-1.0.16 and 1.2.6. To accept all valid PNGS no matter - * how large, set these limits to 0x7fffffffL - */ -#ifndef PNG_USER_WIDTH_MAX -# define PNG_USER_WIDTH_MAX 1000000L -#endif -#ifndef PNG_USER_HEIGHT_MAX -# define PNG_USER_HEIGHT_MAX 1000000L -#endif - -/* These are currently experimental features, define them if you want */ - -/* very little testing */ -/* -#ifdef PNG_READ_SUPPORTED -# ifndef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED -# define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED -# endif -#endif -*/ - -/* This is only for PowerPC big-endian and 680x0 systems */ -/* some testing */ -/* -#ifndef PNG_READ_BIG_ENDIAN_SUPPORTED -# define PNG_READ_BIG_ENDIAN_SUPPORTED -#endif -*/ - -/* Buggy compilers (e.g., gcc 2.7.2.2) need this */ -/* -#define PNG_NO_POINTER_INDEXING -*/ - -/* These functions are turned off by default, as they will be phased out. */ -/* -#define PNG_USELESS_TESTS_SUPPORTED -#define PNG_CORRECT_PALETTE_SUPPORTED -*/ - -/* Any chunks you are not interested in, you can undef here. The - * ones that allocate memory may be expecially important (hIST, - * tEXt, zTXt, tRNS, pCAL). Others will just save time and make png_info - * a bit smaller. - */ - -#if defined(PNG_READ_SUPPORTED) && \ - !defined(PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ - !defined(PNG_NO_READ_ANCILLARY_CHUNKS) -# define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED -#endif - -#if defined(PNG_WRITE_SUPPORTED) && \ - !defined(PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ - !defined(PNG_NO_WRITE_ANCILLARY_CHUNKS) -# define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED -#endif - -#ifdef PNG_READ_ANCILLARY_CHUNKS_SUPPORTED - -#ifdef PNG_NO_READ_TEXT -# define PNG_NO_READ_iTXt -# define PNG_NO_READ_tEXt -# define PNG_NO_READ_zTXt -#endif -#ifndef PNG_NO_READ_bKGD -# define PNG_READ_bKGD_SUPPORTED -# define PNG_bKGD_SUPPORTED -#endif -#ifndef PNG_NO_READ_cHRM -# define PNG_READ_cHRM_SUPPORTED -# define PNG_cHRM_SUPPORTED -#endif -#ifndef PNG_NO_READ_gAMA -# define PNG_READ_gAMA_SUPPORTED -# define PNG_gAMA_SUPPORTED -#endif -#ifndef PNG_NO_READ_hIST -# define PNG_READ_hIST_SUPPORTED -# define PNG_hIST_SUPPORTED -#endif -#ifndef PNG_NO_READ_iCCP -# define PNG_READ_iCCP_SUPPORTED -# define PNG_iCCP_SUPPORTED -#endif -#ifndef PNG_NO_READ_iTXt -# ifndef PNG_READ_iTXt_SUPPORTED -# define PNG_READ_iTXt_SUPPORTED -# endif -# ifndef PNG_iTXt_SUPPORTED -# define PNG_iTXt_SUPPORTED -# endif -#endif -#ifndef PNG_NO_READ_oFFs -# define PNG_READ_oFFs_SUPPORTED -# define PNG_oFFs_SUPPORTED -#endif -#ifndef PNG_NO_READ_pCAL -# define PNG_READ_pCAL_SUPPORTED -# define PNG_pCAL_SUPPORTED -#endif -#ifndef PNG_NO_READ_sCAL -# define PNG_READ_sCAL_SUPPORTED -# define PNG_sCAL_SUPPORTED -#endif -#ifndef PNG_NO_READ_pHYs -# define PNG_READ_pHYs_SUPPORTED -# define PNG_pHYs_SUPPORTED -#endif -#ifndef PNG_NO_READ_sBIT -# define PNG_READ_sBIT_SUPPORTED -# define PNG_sBIT_SUPPORTED -#endif -#ifndef PNG_NO_READ_sPLT -# define PNG_READ_sPLT_SUPPORTED -# define PNG_sPLT_SUPPORTED -#endif -#ifndef PNG_NO_READ_sRGB -# define PNG_READ_sRGB_SUPPORTED -# define PNG_sRGB_SUPPORTED -#endif -#ifndef PNG_NO_READ_tEXt -# define PNG_READ_tEXt_SUPPORTED -# define PNG_tEXt_SUPPORTED -#endif -#ifndef PNG_NO_READ_tIME -# define PNG_READ_tIME_SUPPORTED -# define PNG_tIME_SUPPORTED -#endif -#ifndef PNG_NO_READ_tRNS -# define PNG_READ_tRNS_SUPPORTED -# define PNG_tRNS_SUPPORTED -#endif -#ifndef PNG_NO_READ_zTXt -# define PNG_READ_zTXt_SUPPORTED -# define PNG_zTXt_SUPPORTED -#endif -#ifndef PNG_NO_READ_UNKNOWN_CHUNKS -# define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED -# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED -# define PNG_UNKNOWN_CHUNKS_SUPPORTED -# endif -# ifndef PNG_NO_HANDLE_AS_UNKNOWN -# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED -# endif -#endif -#if !defined(PNG_NO_READ_USER_CHUNKS) && \ - defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) -# define PNG_READ_USER_CHUNKS_SUPPORTED -# define PNG_USER_CHUNKS_SUPPORTED -# ifdef PNG_NO_READ_UNKNOWN_CHUNKS -# undef PNG_NO_READ_UNKNOWN_CHUNKS -# endif -# ifdef PNG_NO_HANDLE_AS_UNKNOWN -# undef PNG_NO_HANDLE_AS_UNKNOWN -# endif -#endif -#ifndef PNG_NO_READ_OPT_PLTE -# define PNG_READ_OPT_PLTE_SUPPORTED /* only affects support of the */ -#endif /* optional PLTE chunk in RGB and RGBA images */ -#if defined(PNG_READ_iTXt_SUPPORTED) || defined(PNG_READ_tEXt_SUPPORTED) || \ - defined(PNG_READ_zTXt_SUPPORTED) -# define PNG_READ_TEXT_SUPPORTED -# define PNG_TEXT_SUPPORTED -#endif - -#endif /* PNG_READ_ANCILLARY_CHUNKS_SUPPORTED */ - -#ifdef PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED - -#ifdef PNG_NO_WRITE_TEXT -# define PNG_NO_WRITE_iTXt -# define PNG_NO_WRITE_tEXt -# define PNG_NO_WRITE_zTXt -#endif -#ifndef PNG_NO_WRITE_bKGD -# define PNG_WRITE_bKGD_SUPPORTED -# ifndef PNG_bKGD_SUPPORTED -# define PNG_bKGD_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_cHRM -# define PNG_WRITE_cHRM_SUPPORTED -# ifndef PNG_cHRM_SUPPORTED -# define PNG_cHRM_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_gAMA -# define PNG_WRITE_gAMA_SUPPORTED -# ifndef PNG_gAMA_SUPPORTED -# define PNG_gAMA_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_hIST -# define PNG_WRITE_hIST_SUPPORTED -# ifndef PNG_hIST_SUPPORTED -# define PNG_hIST_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_iCCP -# define PNG_WRITE_iCCP_SUPPORTED -# ifndef PNG_iCCP_SUPPORTED -# define PNG_iCCP_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_iTXt -# ifndef PNG_WRITE_iTXt_SUPPORTED -# define PNG_WRITE_iTXt_SUPPORTED -# endif -# ifndef PNG_iTXt_SUPPORTED -# define PNG_iTXt_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_oFFs -# define PNG_WRITE_oFFs_SUPPORTED -# ifndef PNG_oFFs_SUPPORTED -# define PNG_oFFs_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_pCAL -# define PNG_WRITE_pCAL_SUPPORTED -# ifndef PNG_pCAL_SUPPORTED -# define PNG_pCAL_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_sCAL -# define PNG_WRITE_sCAL_SUPPORTED -# ifndef PNG_sCAL_SUPPORTED -# define PNG_sCAL_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_pHYs -# define PNG_WRITE_pHYs_SUPPORTED -# ifndef PNG_pHYs_SUPPORTED -# define PNG_pHYs_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_sBIT -# define PNG_WRITE_sBIT_SUPPORTED -# ifndef PNG_sBIT_SUPPORTED -# define PNG_sBIT_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_sPLT -# define PNG_WRITE_sPLT_SUPPORTED -# ifndef PNG_sPLT_SUPPORTED -# define PNG_sPLT_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_sRGB -# define PNG_WRITE_sRGB_SUPPORTED -# ifndef PNG_sRGB_SUPPORTED -# define PNG_sRGB_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_tEXt -# define PNG_WRITE_tEXt_SUPPORTED -# ifndef PNG_tEXt_SUPPORTED -# define PNG_tEXt_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_tIME -# define PNG_WRITE_tIME_SUPPORTED -# ifndef PNG_tIME_SUPPORTED -# define PNG_tIME_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_tRNS -# define PNG_WRITE_tRNS_SUPPORTED -# ifndef PNG_tRNS_SUPPORTED -# define PNG_tRNS_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_zTXt -# define PNG_WRITE_zTXt_SUPPORTED -# ifndef PNG_zTXt_SUPPORTED -# define PNG_zTXt_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS -# define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED -# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED -# define PNG_UNKNOWN_CHUNKS_SUPPORTED -# endif -# ifndef PNG_NO_HANDLE_AS_UNKNOWN -# ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED -# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED -# endif -# endif -#endif -#if defined(PNG_WRITE_iTXt_SUPPORTED) || defined(PNG_WRITE_tEXt_SUPPORTED) || \ - defined(PNG_WRITE_zTXt_SUPPORTED) -# define PNG_WRITE_TEXT_SUPPORTED -# ifndef PNG_TEXT_SUPPORTED -# define PNG_TEXT_SUPPORTED -# endif -#endif - -#endif /* PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED */ - -/* Turn this off to disable png_read_png() and - * png_write_png() and leave the row_pointers member - * out of the info structure. - */ -#ifndef PNG_NO_INFO_IMAGE -# define PNG_INFO_IMAGE_SUPPORTED -#endif - -/* need the time information for reading tIME chunks */ -#if defined(PNG_tIME_SUPPORTED) -# if !defined(_WIN32_WCE) - /* "time.h" functions are not supported on WindowsCE */ -# include +#ifndef PNG_CONST +# ifndef PNG_NO_CONST +# define PNG_CONST const +# else +# define PNG_CONST # endif #endif @@ -1109,28 +434,29 @@ * numbers suggest (a png_uint_32 must be at least 32 bits long), but they * don't have to be exactly that size. Some compilers dislike passing * unsigned shorts as function parameters, so you may be better off using - * unsigned int for png_uint_16. Likewise, for 64-bit systems, you may - * want to have unsigned int for png_uint_32 instead of unsigned long. + * unsigned int for png_uint_16. */ +#if defined(INT_MAX) && (INT_MAX > 0x7ffffffeL) +typedef unsigned int png_uint_32; +typedef int png_int_32; +#else typedef unsigned long png_uint_32; typedef long png_int_32; +#endif typedef unsigned short png_uint_16; typedef short png_int_16; typedef unsigned char png_byte; -/* This is usually size_t. It is typedef'ed just in case you need it to - change (I'm not sure if you will or not, so I thought I'd be safe) */ -#ifdef PNG_SIZE_T - typedef PNG_SIZE_T png_size_t; -# define png_sizeof(x) png_convert_size(sizeof (x)) +#ifdef PNG_NO_SIZE_T +typedef unsigned int png_size_t; #else - typedef size_t png_size_t; -# define png_sizeof(x) sizeof (x) +typedef size_t png_size_t; #endif +#define png_sizeof(x) (sizeof (x)) /* The following is needed for medium model support. It cannot be in the - * PNG_INTERNAL section. Needs modification for other compilers besides + * pngpriv.h header. Needs modification for other compilers besides * MSC. Model independent support declares all arrays and pointers to be * large using the far keyword. The zlib version used must also support * model independent data. As of version zlib 1.0.4, the necessary changes @@ -1139,27 +465,28 @@ typedef unsigned char png_byte; */ /* Separate compiler dependencies (problem here is that zlib.h always - defines FAR. (SJT) */ + * defines FAR. (SJT) + */ #ifdef __BORLANDC__ # if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__) # define LDATA 1 # else # define LDATA 0 # endif - /* GRR: why is Cygwin in here? Cygwin is not Borland C... */ + /* GRR: why is Cygwin in here? Cygwin is not Borland C... */ # if !defined(__WIN32__) && !defined(__FLAT__) && !defined(__CYGWIN__) -# define PNG_MAX_MALLOC_64K +# define PNG_MAX_MALLOC_64K /* only used in build */ # if (LDATA != 1) # ifndef FAR # define FAR __far # endif # define USE_FAR_KEYWORD # endif /* LDATA != 1 */ - /* Possibly useful for moving data out of default segment. - * Uncomment it if you want. Could also define FARDATA as - * const if your compiler supports it. (SJT) -# define FARDATA FAR - */ + /* Possibly useful for moving data out of default segment. + * Uncomment it if you want. Could also define FARDATA as + * const if your compiler supports it. (SJT) +# define FARDATA FAR + */ # endif /* __WIN32__, __FLAT__, __CYGWIN__ */ #endif /* __BORLANDC__ */ @@ -1170,8 +497,8 @@ typedef unsigned char png_byte; */ /* MSC Medium model */ -#if defined(FAR) -# if defined(M_I86MM) +#ifdef FAR +# ifdef M_I86MM # define USE_FAR_KEYWORD # define FARDATA FAR # include @@ -1189,30 +516,37 @@ typedef unsigned char png_byte; #endif /* Typedef for floating-point numbers that are converted - to fixed-point with a multiple of 100,000, e.g., int_gamma */ + * to fixed-point with a multiple of 100,000, e.g., gamma + */ typedef png_int_32 png_fixed_point; /* Add typedefs for pointers */ -typedef void FAR * png_voidp; -typedef png_byte FAR * png_bytep; -typedef png_uint_32 FAR * png_uint_32p; -typedef png_int_32 FAR * png_int_32p; -typedef png_uint_16 FAR * png_uint_16p; -typedef png_int_16 FAR * png_int_16p; -typedef PNG_CONST char FAR * png_const_charp; -typedef char FAR * png_charp; -typedef png_fixed_point FAR * png_fixed_point_p; +typedef void FAR * png_voidp; +typedef PNG_CONST void FAR * png_const_voidp; +typedef png_byte FAR * png_bytep; +typedef PNG_CONST png_byte FAR * png_const_bytep; +typedef png_uint_32 FAR * png_uint_32p; +typedef PNG_CONST png_uint_32 FAR * png_const_uint_32p; +typedef png_int_32 FAR * png_int_32p; +typedef PNG_CONST png_int_32 FAR * png_const_int_32p; +typedef png_uint_16 FAR * png_uint_16p; +typedef PNG_CONST png_uint_16 FAR * png_const_uint_16p; +typedef png_int_16 FAR * png_int_16p; +typedef PNG_CONST png_int_16 FAR * png_const_int_16p; +typedef char FAR * png_charp; +typedef PNG_CONST char FAR * png_const_charp; +typedef png_fixed_point FAR * png_fixed_point_p; +typedef PNG_CONST png_fixed_point FAR * png_const_fixed_point_p; +typedef png_size_t FAR * png_size_tp; +typedef PNG_CONST png_size_t FAR * png_const_size_tp; -#ifndef PNG_NO_STDIO -#if defined(_WIN32_WCE) -typedef HANDLE png_FILE_p; -#else -typedef FILE * png_FILE_p; -#endif +#ifdef PNG_STDIO_SUPPORTED +typedef FILE * png_FILE_p; #endif #ifdef PNG_FLOATING_POINT_SUPPORTED -typedef double FAR * png_doublep; +typedef double FAR * png_doublep; +typedef PNG_CONST double FAR * png_const_doublep; #endif /* Pointers to pointers; i.e. arrays */ @@ -1231,251 +565,32 @@ typedef double FAR * FAR * png_doublepp; /* Pointers to pointers to pointers; i.e., pointer to array */ typedef char FAR * FAR * FAR * png_charppp; -#if defined(PNG_1_0_X) || defined(PNG_1_2_X) -/* SPC - Is this stuff deprecated? */ -/* It'll be removed as of libpng-1.3.0 - GR-P */ -/* libpng typedefs for types in zlib. If zlib changes - * or another compression library is used, then change these. - * Eliminates need to change all the source files. +/* png_alloc_size_t is guaranteed to be no smaller than png_size_t, + * and no smaller than png_uint_32. Casts from png_size_t or png_uint_32 + * to png_alloc_size_t are not necessary; in fact, it is recommended + * not to use them at all so that the compiler can complain when something + * turns out to be problematic. + * Casts in the other direction (from png_alloc_size_t to png_size_t or + * png_uint_32) should be explicitly applied; however, we do not expect + * to encounter practical situations that require such conversions. */ -typedef charf * png_zcharp; -typedef charf * FAR * png_zcharpp; -typedef z_stream FAR * png_zstreamp; -#endif /* (PNG_1_0_X) || defined(PNG_1_2_X) */ - -/* - * Define PNG_BUILD_DLL if the module being built is a Windows - * LIBPNG DLL. - * - * Define PNG_USE_DLL if you want to *link* to the Windows LIBPNG DLL. - * It is equivalent to Microsoft predefined macro _DLL that is - * automatically defined when you compile using the share - * version of the CRT (C Run-Time library) - * - * The cygwin mods make this behavior a little different: - * Define PNG_BUILD_DLL if you are building a dll for use with cygwin - * Define PNG_STATIC if you are building a static library for use with cygwin, - * -or- if you are building an application that you want to link to the - * static library. - * PNG_USE_DLL is defined by default (no user action needed) unless one of - * the other flags is defined. - */ - -#if !defined(PNG_DLL) && (defined(PNG_BUILD_DLL) || defined(PNG_USE_DLL)) -# define PNG_DLL -#endif -/* If CYGWIN, then disallow GLOBAL ARRAYS unless building a static lib. - * When building a static lib, default to no GLOBAL ARRAYS, but allow - * command-line override - */ -#if defined(__CYGWIN__) -# if !defined(PNG_STATIC) -# if defined(PNG_USE_GLOBAL_ARRAYS) -# undef PNG_USE_GLOBAL_ARRAYS -# endif -# if !defined(PNG_USE_LOCAL_ARRAYS) -# define PNG_USE_LOCAL_ARRAYS -# endif -# else -# if defined(PNG_USE_LOCAL_ARRAYS) || defined(PNG_NO_GLOBAL_ARRAYS) -# if defined(PNG_USE_GLOBAL_ARRAYS) -# undef PNG_USE_GLOBAL_ARRAYS -# endif -# endif -# endif -# if !defined(PNG_USE_LOCAL_ARRAYS) && !defined(PNG_USE_GLOBAL_ARRAYS) -# define PNG_USE_LOCAL_ARRAYS -# endif -#endif - -/* Do not use global arrays (helps with building DLL's) - * They are no longer used in libpng itself, since version 1.0.5c, - * but might be required for some pre-1.0.5c applications. - */ -#if !defined(PNG_USE_LOCAL_ARRAYS) && !defined(PNG_USE_GLOBAL_ARRAYS) -# if defined(PNG_NO_GLOBAL_ARRAYS) || \ - (defined(__GNUC__) && defined(PNG_DLL)) || defined(_MSC_VER) -# define PNG_USE_LOCAL_ARRAYS -# else -# define PNG_USE_GLOBAL_ARRAYS -# endif -#endif - -#if defined(__CYGWIN__) -# undef PNGAPI -# define PNGAPI __cdecl -# undef PNG_IMPEXP -# define PNG_IMPEXP -#endif - -/* If you define PNGAPI, e.g., with compiler option "-DPNGAPI=__stdcall", - * you may get warnings regarding the linkage of png_zalloc and png_zfree. - * Don't ignore those warnings; you must also reset the default calling - * convention in your compiler to match your PNGAPI, and you must build - * zlib and your applications the same way you build libpng. - */ - -#if defined(__MINGW32__) && !defined(PNG_MODULEDEF) -# ifndef PNG_NO_MODULEDEF -# define PNG_NO_MODULEDEF -# endif -#endif - -#if !defined(PNG_IMPEXP) && defined(PNG_BUILD_DLL) && !defined(PNG_NO_MODULEDEF) -# define PNG_IMPEXP -#endif - -#if defined(PNG_DLL) || defined(_DLL) || defined(__DLL__ ) || \ - (( defined(_Windows) || defined(_WINDOWS) || \ - defined(WIN32) || defined(_WIN32) || defined(__WIN32__) )) - -# ifndef PNGAPI -# if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800)) -# define PNGAPI __cdecl -# else -# define PNGAPI _cdecl -# endif -# endif - -# if !defined(PNG_IMPEXP) && (!defined(PNG_DLL) || \ - 0 /* WINCOMPILER_WITH_NO_SUPPORT_FOR_DECLIMPEXP */) -# define PNG_IMPEXP -# endif - -# if !defined(PNG_IMPEXP) - -# define PNG_EXPORT_TYPE1(type,symbol) PNG_IMPEXP type PNGAPI symbol -# define PNG_EXPORT_TYPE2(type,symbol) type PNG_IMPEXP PNGAPI symbol - - /* Borland/Microsoft */ -# if defined(_MSC_VER) || defined(__BORLANDC__) -# if (_MSC_VER >= 800) || (__BORLANDC__ >= 0x500) -# define PNG_EXPORT PNG_EXPORT_TYPE1 -# else -# define PNG_EXPORT PNG_EXPORT_TYPE2 -# if defined(PNG_BUILD_DLL) -# define PNG_IMPEXP __export -# else -# define PNG_IMPEXP /*__import */ /* doesn't exist AFAIK in - VC++ */ -# endif /* Exists in Borland C++ for - C++ classes (== huge) */ -# endif -# endif - -# if !defined(PNG_IMPEXP) -# if defined(PNG_BUILD_DLL) -# define PNG_IMPEXP __declspec(dllexport) -# else -# define PNG_IMPEXP __declspec(dllimport) -# endif -# endif -# endif /* PNG_IMPEXP */ -#else /* !(DLL || non-cygwin WINDOWS) */ -# if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__) -# ifndef PNGAPI -# define PNGAPI _System -# endif -# else -# if 0 /* ... other platforms, with other meanings */ -# endif -# endif -#endif - -#ifndef PNGAPI -# define PNGAPI -#endif -#ifndef PNG_IMPEXP -# define PNG_IMPEXP -#endif - -#ifdef PNG_BUILDSYMS -# ifndef PNG_EXPORT -# define PNG_EXPORT(type,symbol) PNG_FUNCTION_EXPORT symbol END -# endif -# ifdef PNG_USE_GLOBAL_ARRAYS -# ifndef PNG_EXPORT_VAR -# define PNG_EXPORT_VAR(type) PNG_DATA_EXPORT -# endif -# endif -#endif - -#ifndef PNG_EXPORT -# define PNG_EXPORT(type,symbol) PNG_IMPEXP type PNGAPI symbol -#endif - -#ifdef PNG_USE_GLOBAL_ARRAYS -# ifndef PNG_EXPORT_VAR -# define PNG_EXPORT_VAR(type) extern PNG_IMPEXP type -# endif -#endif - -/* User may want to use these so they are not in PNG_INTERNAL. Any library - * functions that are passed far data must be model independent. - */ - -#ifndef PNG_ABORT -# define PNG_ABORT() abort() -#endif - -#ifdef PNG_SETJMP_SUPPORTED -# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf) +#if defined(__TURBOC__) && !defined(__FLAT__) + typedef unsigned long png_alloc_size_t; #else -# define png_jmpbuf(png_ptr) \ - (LIBPNG_WAS_COMPILED_WITH__PNG_SETJMP_NOT_SUPPORTED) -#endif - -#if defined(USE_FAR_KEYWORD) /* memory model independent fns */ -/* use this to make far-to-near assignments */ -# define CHECK 1 -# define NOCHECK 0 -# define CVT_PTR(ptr) (png_far_to_near(png_ptr,ptr,CHECK)) -# define CVT_PTR_NOCHECK(ptr) (png_far_to_near(png_ptr,ptr,NOCHECK)) -# define png_snprintf _fsnprintf /* Added to v 1.2.19 */ -# define png_strlen _fstrlen -# define png_memcmp _fmemcmp /* SJT: added */ -# define png_memcpy _fmemcpy -# define png_memset _fmemset -#else /* use the usual functions */ -# define CVT_PTR(ptr) (ptr) -# define CVT_PTR_NOCHECK(ptr) (ptr) -# ifndef PNG_NO_SNPRINTF -# ifdef _MSC_VER -# define png_snprintf _snprintf /* Added to v 1.2.19 */ -# define png_snprintf2 _snprintf -# define png_snprintf6 _snprintf -# else -# define png_snprintf snprintf /* Added to v 1.2.19 */ -# define png_snprintf2 snprintf -# define png_snprintf6 snprintf -# endif +# if defined(_MSC_VER) && defined(MAXSEG_64K) + typedef unsigned long png_alloc_size_t; # else - /* You don't have or don't want to use snprintf(). Caution: Using - * sprintf instead of snprintf exposes your application to accidental - * or malevolent buffer overflows. If you don't have snprintf() - * as a general rule you should provide one (you can get one from - * Portable OpenSSH). */ -# define png_snprintf(s1,n,fmt,x1) sprintf(s1,fmt,x1) -# define png_snprintf2(s1,n,fmt,x1,x2) sprintf(s1,fmt,x1,x2) -# define png_snprintf6(s1,n,fmt,x1,x2,x3,x4,x5,x6) \ - sprintf(s1,fmt,x1,x2,x3,x4,x5,x6) + /* This is an attempt to detect an old Windows system where (int) is + * actually 16 bits, in that case png_malloc must have an argument with a + * bigger size to accomodate the requirements of the library. + */ +# if (defined(_Windows) || defined(_WINDOWS) || defined(_WINDOWS_)) && \ + (!defined(INT_MAX) || INT_MAX <= 0x7ffffffeL) + typedef DWORD png_alloc_size_t; +# else + typedef png_size_t png_alloc_size_t; +# endif # endif -# define png_strlen strlen -# define png_memcmp memcmp /* SJT: added */ -# define png_memcpy memcpy -# define png_memset memset #endif -/* End of memory model independent support */ - -/* Just a little check that someone hasn't tried to define something - * contradictory. - */ -#if (PNG_ZBUF_SIZE > 65536L) && defined(PNG_MAX_MALLOC_64K) -# undef PNG_ZBUF_SIZE -# define PNG_ZBUF_SIZE 65536L -#endif - -/* Added at libpng-1.2.8 */ -#endif /* PNG_VERSION_INFO_ONLY */ #endif /* PNGCONF_H */ diff --git a/extlib/libpng/pnglibconf.h b/extlib/libpng/pnglibconf.h new file mode 100644 index 0000000..6facf39 --- /dev/null +++ b/extlib/libpng/pnglibconf.h @@ -0,0 +1,186 @@ + +/* libpng STANDARD API DEFINITION */ + +/* pnglibconf.h - library build configuration */ + +/* Libpng 1.5.10 - March 29, 2012 */ + +/* Copyright (c) 1998-2012 Glenn Randers-Pehrson */ + +/* This code is released under the libpng license. */ +/* For conditions of distribution and use, see the disclaimer */ +/* and license in png.h */ + +/* pnglibconf.h */ +/* Derived from: scripts/pnglibconf.dfa */ +/* If you edit this file by hand you must obey the rules expressed in */ +/* pnglibconf.dfa with respect to the dependencies between the following */ +/* symbols. It is much better to generate a new file using */ +/* scripts/libpngconf.mak */ + +#ifndef PNGLCONF_H +#define PNGLCONF_H +/* settings */ +#define PNG_API_RULE 0 +#define PNG_CALLOC_SUPPORTED +#define PNG_COST_SHIFT 3 +#define PNG_DEFAULT_READ_MACROS 1 +#define PNG_GAMMA_THRESHOLD_FIXED 5000 +#define PNG_MAX_GAMMA_8 11 +#define PNG_QUANTIZE_BLUE_BITS 5 +#define PNG_QUANTIZE_GREEN_BITS 5 +#define PNG_QUANTIZE_RED_BITS 5 +#define PNG_sCAL_PRECISION 5 +#define PNG_WEIGHT_SHIFT 8 +#define PNG_ZBUF_SIZE 8192 +/* end of settings */ +/* options */ +#define PNG_16BIT_SUPPORTED +#define PNG_ALIGN_MEMORY_SUPPORTED +#define PNG_BENIGN_ERRORS_SUPPORTED +#define PNG_bKGD_SUPPORTED +#define PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED +#define PNG_CHECK_cHRM_SUPPORTED +#define PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED +#define PNG_cHRM_SUPPORTED +#define PNG_CONSOLE_IO_SUPPORTED +#define PNG_CONVERT_tIME_SUPPORTED +#define PNG_EASY_ACCESS_SUPPORTED +/*#undef PNG_ERROR_NUMBERS_SUPPORTED*/ +#define PNG_ERROR_TEXT_SUPPORTED +#define PNG_FIXED_POINT_SUPPORTED +#define PNG_FLOATING_ARITHMETIC_SUPPORTED +#define PNG_FLOATING_POINT_SUPPORTED +#define PNG_gAMA_SUPPORTED +#define PNG_HANDLE_AS_UNKNOWN_SUPPORTED +#define PNG_hIST_SUPPORTED +#define PNG_iCCP_SUPPORTED +#define PNG_INCH_CONVERSIONS_SUPPORTED +#define PNG_INFO_IMAGE_SUPPORTED +#define PNG_IO_STATE_SUPPORTED +#define PNG_iTXt_SUPPORTED +#define PNG_MNG_FEATURES_SUPPORTED +#define PNG_oFFs_SUPPORTED +#define PNG_pCAL_SUPPORTED +#define PNG_pHYs_SUPPORTED +#define PNG_POINTER_INDEXING_SUPPORTED +#define PNG_PROGRESSIVE_READ_SUPPORTED +#define PNG_READ_16BIT_SUPPORTED +#define PNG_READ_ALPHA_MODE_SUPPORTED +#define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED +#define PNG_READ_BACKGROUND_SUPPORTED +#define PNG_READ_BGR_SUPPORTED +#define PNG_READ_bKGD_SUPPORTED +#define PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED +#define PNG_READ_cHRM_SUPPORTED +#define PNG_READ_COMPOSITE_NODIV_SUPPORTED +#define PNG_READ_COMPRESSED_TEXT_SUPPORTED +#define PNG_READ_EXPAND_16_SUPPORTED +#define PNG_READ_EXPAND_SUPPORTED +#define PNG_READ_FILLER_SUPPORTED +#define PNG_READ_gAMA_SUPPORTED +#define PNG_READ_GAMMA_SUPPORTED +#define PNG_READ_GRAY_TO_RGB_SUPPORTED +#define PNG_READ_hIST_SUPPORTED +#define PNG_READ_iCCP_SUPPORTED +#define PNG_READ_INTERLACING_SUPPORTED +#define PNG_READ_INT_FUNCTIONS_SUPPORTED +#define PNG_READ_INVERT_ALPHA_SUPPORTED +#define PNG_READ_INVERT_SUPPORTED +#define PNG_READ_iTXt_SUPPORTED +#define PNG_READ_oFFs_SUPPORTED +#define PNG_READ_OPT_PLTE_SUPPORTED +#define PNG_READ_PACK_SUPPORTED +#define PNG_READ_PACKSWAP_SUPPORTED +#define PNG_READ_pCAL_SUPPORTED +#define PNG_READ_pHYs_SUPPORTED +#define PNG_READ_QUANTIZE_SUPPORTED +#define PNG_READ_RGB_TO_GRAY_SUPPORTED +#define PNG_READ_sBIT_SUPPORTED +#define PNG_READ_SCALE_16_TO_8_SUPPORTED +#define PNG_READ_sCAL_SUPPORTED +#define PNG_READ_SHIFT_SUPPORTED +#define PNG_READ_sPLT_SUPPORTED +#define PNG_READ_sRGB_SUPPORTED +#define PNG_READ_STRIP_16_TO_8_SUPPORTED +#define PNG_READ_STRIP_ALPHA_SUPPORTED +#define PNG_READ_SUPPORTED +#define PNG_READ_SWAP_ALPHA_SUPPORTED +#define PNG_READ_SWAP_SUPPORTED +#define PNG_READ_tEXt_SUPPORTED +#define PNG_READ_TEXT_SUPPORTED +#define PNG_READ_tIME_SUPPORTED +#define PNG_READ_TRANSFORMS_SUPPORTED +#define PNG_READ_tRNS_SUPPORTED +#define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_READ_USER_CHUNKS_SUPPORTED +#define PNG_READ_USER_TRANSFORM_SUPPORTED +#define PNG_READ_zTXt_SUPPORTED +#define PNG_SAVE_INT_32_SUPPORTED +#define PNG_sBIT_SUPPORTED +#define PNG_sCAL_SUPPORTED +#define PNG_SEQUENTIAL_READ_SUPPORTED +#define PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED +#define PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED +#define PNG_SETJMP_SUPPORTED +#define PNG_SET_USER_LIMITS_SUPPORTED +#define PNG_sPLT_SUPPORTED +#define PNG_sRGB_SUPPORTED +#define PNG_STDIO_SUPPORTED +#define PNG_tEXt_SUPPORTED +#define PNG_TEXT_SUPPORTED +#define PNG_TIME_RFC1123_SUPPORTED +#define PNG_tIME_SUPPORTED +#define PNG_tRNS_SUPPORTED +#define PNG_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_USER_CHUNKS_SUPPORTED +#define PNG_USER_LIMITS_SUPPORTED +#define PNG_USER_MEM_SUPPORTED +#define PNG_USER_TRANSFORM_INFO_SUPPORTED +#define PNG_USER_TRANSFORM_PTR_SUPPORTED +#define PNG_WARNINGS_SUPPORTED +#define PNG_WRITE_16BIT_SUPPORTED +#define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED +#define PNG_WRITE_BGR_SUPPORTED +#define PNG_WRITE_bKGD_SUPPORTED +#define PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED +#define PNG_WRITE_cHRM_SUPPORTED +#define PNG_WRITE_COMPRESSED_TEXT_SUPPORTED +#define PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED +#define PNG_WRITE_FILLER_SUPPORTED +#define PNG_WRITE_FILTER_SUPPORTED +#define PNG_WRITE_FLUSH_SUPPORTED +#define PNG_WRITE_gAMA_SUPPORTED +#define PNG_WRITE_hIST_SUPPORTED +#define PNG_WRITE_iCCP_SUPPORTED +#define PNG_WRITE_INTERLACING_SUPPORTED +#define PNG_WRITE_INT_FUNCTIONS_SUPPORTED +#define PNG_WRITE_INVERT_ALPHA_SUPPORTED +#define PNG_WRITE_INVERT_SUPPORTED +#define PNG_WRITE_iTXt_SUPPORTED +#define PNG_WRITE_oFFs_SUPPORTED +#define PNG_WRITE_OPTIMIZE_CMF_SUPPORTED +#define PNG_WRITE_PACK_SUPPORTED +#define PNG_WRITE_PACKSWAP_SUPPORTED +#define PNG_WRITE_pCAL_SUPPORTED +#define PNG_WRITE_pHYs_SUPPORTED +#define PNG_WRITE_sBIT_SUPPORTED +#define PNG_WRITE_sCAL_SUPPORTED +#define PNG_WRITE_SHIFT_SUPPORTED +#define PNG_WRITE_sPLT_SUPPORTED +#define PNG_WRITE_sRGB_SUPPORTED +#define PNG_WRITE_SUPPORTED +#define PNG_WRITE_SWAP_ALPHA_SUPPORTED +#define PNG_WRITE_SWAP_SUPPORTED +#define PNG_WRITE_tEXt_SUPPORTED +#define PNG_WRITE_TEXT_SUPPORTED +#define PNG_WRITE_tIME_SUPPORTED +#define PNG_WRITE_TRANSFORMS_SUPPORTED +#define PNG_WRITE_tRNS_SUPPORTED +#define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_WRITE_USER_TRANSFORM_SUPPORTED +#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED +#define PNG_WRITE_zTXt_SUPPORTED +#define PNG_zTXt_SUPPORTED +/* end of options */ +#endif /* PNGLCONF_H */ diff --git a/extlib/zlib/zconf.h b/extlib/zlib/zconf.h index 03a9431..4add89e 100644 --- a/extlib/zlib/zconf.h +++ b/extlib/zlib/zconf.h @@ -1,9 +1,9 @@ /* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2005 Jean-loup Gailly. + * Copyright (C) 1995-2010 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ -/* @(#) $Id$ */ +/* @(#) $Id: zconf.h 8485 2011-02-27 16:51:58Z manolo $ */ #ifndef ZCONF_H #define ZCONF_H @@ -11,52 +11,124 @@ /* * If you *really* need a unique prefix for all types and library functions, * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". */ -#ifdef Z_PREFIX -# define deflateInit_ z_deflateInit_ -# define deflate z_deflate -# define deflateEnd z_deflateEnd -# define inflateInit_ z_inflateInit_ -# define inflate z_inflate -# define inflateEnd z_inflateEnd -# define deflateInit2_ z_deflateInit2_ -# define deflateSetDictionary z_deflateSetDictionary -# define deflateCopy z_deflateCopy -# define deflateReset z_deflateReset -# define deflateParams z_deflateParams -# define deflateBound z_deflateBound -# define deflatePrime z_deflatePrime -# define inflateInit2_ z_inflateInit2_ -# define inflateSetDictionary z_inflateSetDictionary -# define inflateSync z_inflateSync -# define inflateSyncPoint z_inflateSyncPoint -# define inflateCopy z_inflateCopy -# define inflateReset z_inflateReset -# define inflateBack z_inflateBack -# define inflateBackEnd z_inflateBackEnd +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ + +/* all linked symbols */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 # define compress z_compress # define compress2 z_compress2 # define compressBound z_compressBound -# define uncompress z_uncompress -# define adler32 z_adler32 # define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright # define get_crc_table z_get_crc_table +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzgetc z_gzgetc +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzwrite z_gzwrite +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetHeader z_inflateGetHeader +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# define uncompress z_uncompress # define zError z_zError +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion -# define alloc_func z_alloc_func -# define free_func z_free_func -# define in_func z_in_func -# define out_func z_out_func +/* all zlib typedefs in zlib.h and zconf.h */ # define Byte z_Byte -# define uInt z_uInt -# define uLong z_uLong # define Bytef z_Bytef +# define alloc_func z_alloc_func # define charf z_charf +# define free_func z_free_func +# define gzFile z_gzFile +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# define in_func z_in_func # define intf z_intf +# define out_func z_out_func +# define uInt z_uInt # define uIntf z_uIntf +# define uLong z_uLong # define uLongf z_uLongf -# define voidpf z_voidpf # define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + #endif #if defined(__MSDOS__) && !defined(MSDOS) @@ -284,49 +356,77 @@ typedef uLong FAR uLongf; typedef Byte *voidp; #endif -#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ -# include /* for off_t */ -# include /* for SEEK_* and off_t */ -# ifdef VMS -# include /* for off_t */ -# endif -# define z_off_t off_t +#if !(defined(WINDOWS) || defined(WIN32)) +# define HAVE_UNISTD_H #endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef STDC +# include /* for off_t */ +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +#endif + #ifndef SEEK_SET # define SEEK_SET 0 /* Seek from beginning of file. */ # define SEEK_CUR 1 /* Seek from current position. */ # define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ #endif + #ifndef z_off_t # define z_off_t long #endif +#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 +# define z_off64_t off64_t +#else +# define z_off64_t z_off_t +#endif + #if defined(__OS400__) # define NO_vsnprintf #endif #if defined(__MVS__) # define NO_vsnprintf -# ifdef FAR -# undef FAR -# endif #endif /* MVS linker does not support external names larger than 8 bytes */ #if defined(__MVS__) -# pragma map(deflateInit_,"DEIN") -# pragma map(deflateInit2_,"DEIN2") -# pragma map(deflateEnd,"DEEND") -# pragma map(deflateBound,"DEBND") -# pragma map(inflateInit_,"ININ") -# pragma map(inflateInit2_,"ININ2") -# pragma map(inflateEnd,"INEND") -# pragma map(inflateSync,"INSY") -# pragma map(inflateSetDictionary,"INSEDI") -# pragma map(compressBound,"CMBND") -# pragma map(inflate_table,"INTABL") -# pragma map(inflate_fast,"INFA") -# pragma map(inflate_copyright,"INCOPY") + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") #endif #endif /* ZCONF_H */ diff --git a/extlib/zlib/zlib.h b/extlib/zlib/zlib.h index 0228179..bfbba83 100644 --- a/extlib/zlib/zlib.h +++ b/extlib/zlib/zlib.h @@ -1,7 +1,7 @@ /* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.3, July 18th, 2005 + version 1.2.5, April 19th, 2010 - Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler + Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -37,41 +37,44 @@ extern "C" { #endif -#define ZLIB_VERSION "1.2.3" -#define ZLIB_VERNUM 0x1230 +#define ZLIB_VERSION "1.2.5" +#define ZLIB_VERNUM 0x1250 +#define ZLIB_VER_MAJOR 1 +#define ZLIB_VER_MINOR 2 +#define ZLIB_VER_REVISION 5 +#define ZLIB_VER_SUBREVISION 0 /* - The 'zlib' compression library provides in-memory compression and - decompression functions, including integrity checks of the uncompressed - data. This version of the library supports only one compression method - (deflation) but other algorithms will be added later and will have the same - stream interface. + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed data. + This version of the library supports only one compression method (deflation) + but other algorithms will be added later and will have the same stream + interface. - Compression can be done in a single step if the buffers are large - enough (for example if an input file is mmap'ed), or can be done by - repeated calls of the compression function. In the latter case, the - application must provide more input and/or consume the output + Compression can be done in a single step if the buffers are large enough, + or can be done by repeated calls of the compression function. In the latter + case, the application must provide more input and/or consume the output (providing more output space) before each call. - The compressed data format used by default by the in-memory functions is + The compressed data format used by default by the in-memory functions is the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped around a deflate stream, which is itself documented in RFC 1951. - The library also supports reading and writing files in gzip (.gz) format + The library also supports reading and writing files in gzip (.gz) format with an interface similar to that of stdio using the functions that start with "gz". The gzip format is different from the zlib format. gzip is a gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. - This library can optionally read and write gzip streams in memory as well. + This library can optionally read and write gzip streams in memory as well. - The zlib format was designed to be compact and fast for use in memory + The zlib format was designed to be compact and fast for use in memory and on communications channels. The gzip format was designed for single- file compression on file systems, has a larger header than zlib to maintain directory information, and uses a different, slower check method than zlib. - The library does not install any signal handler. The decoder checks - the consistency of the compressed data, so the library should never - crash even in case of corrupted input. + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never crash + even in case of corrupted input. */ typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); @@ -126,45 +129,45 @@ typedef struct gz_header_s { typedef gz_header FAR *gz_headerp; /* - The application must update next_in and avail_in when avail_in has - dropped to zero. It must update next_out and avail_out when avail_out - has dropped to zero. The application must initialize zalloc, zfree and - opaque before calling the init function. All other fields are set by the - compression library and must not be updated by the application. + The application must update next_in and avail_in when avail_in has dropped + to zero. It must update next_out and avail_out when avail_out has dropped + to zero. The application must initialize zalloc, zfree and opaque before + calling the init function. All other fields are set by the compression + library and must not be updated by the application. - The opaque value provided by the application will be passed as the first - parameter for calls of zalloc and zfree. This can be useful for custom - memory management. The compression library attaches no meaning to the + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the opaque value. - zalloc must return Z_NULL if there is not enough memory for the object. + zalloc must return Z_NULL if there is not enough memory for the object. If zlib is used in a multi-threaded application, zalloc and zfree must be thread safe. - On 16-bit systems, the functions zalloc and zfree must be able to allocate - exactly 65536 bytes, but will not be required to allocate more than this - if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, - pointers returned by zalloc for objects of exactly 65536 bytes *must* - have their offset normalized to zero. The default allocation function - provided by this library ensures this (see zutil.c). To reduce memory - requirements and avoid any allocation of 64K objects, at the expense of - compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this if + the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers + returned by zalloc for objects of exactly 65536 bytes *must* have their + offset normalized to zero. The default allocation function provided by this + library ensures this (see zutil.c). To reduce memory requirements and avoid + any allocation of 64K objects, at the expense of compression ratio, compile + the library with -DMAX_WBITS=14 (see zconf.h). - The fields total_in and total_out can be used for statistics or - progress reports. After compression, total_in holds the total size of - the uncompressed data and may be saved for use in the decompressor - (particularly if the decompressor wants to decompress everything in - a single step). + The fields total_in and total_out can be used for statistics or progress + reports. After compression, total_in holds the total size of the + uncompressed data and may be saved for use in the decompressor (particularly + if the decompressor wants to decompress everything in a single step). */ /* constants */ #define Z_NO_FLUSH 0 -#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ +#define Z_PARTIAL_FLUSH 1 #define Z_SYNC_FLUSH 2 #define Z_FULL_FLUSH 3 #define Z_FINISH 4 #define Z_BLOCK 5 +#define Z_TREES 6 /* Allowed flush values; see deflate() and inflate() below for details */ #define Z_OK 0 @@ -176,8 +179,8 @@ typedef gz_header FAR *gz_headerp; #define Z_MEM_ERROR (-4) #define Z_BUF_ERROR (-5) #define Z_VERSION_ERROR (-6) -/* Return codes for the compression/decompression functions. Negative - * values are errors, positive values are used for special but normal events. +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. */ #define Z_NO_COMPRESSION 0 @@ -207,119 +210,140 @@ typedef gz_header FAR *gz_headerp; #define zlib_version zlibVersion() /* for compatibility with versions < 1.0.2 */ + /* basic functions */ ZEXTERN const char * ZEXPORT zlibVersion OF((void)); /* The application can compare zlibVersion and ZLIB_VERSION for consistency. - If the first character differs, the library code actually used is - not compatible with the zlib.h header file used by the application. - This check is automatically made by deflateInit and inflateInit. + If the first character differs, the library code actually used is not + compatible with the zlib.h header file used by the application. This check + is automatically made by deflateInit and inflateInit. */ /* ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); - Initializes the internal stream state for compression. The fields - zalloc, zfree and opaque must be initialized before by the caller. - If zalloc and zfree are set to Z_NULL, deflateInit updates them to - use default allocation functions. + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. If + zalloc and zfree are set to Z_NULL, deflateInit updates them to use default + allocation functions. The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: - 1 gives best speed, 9 gives best compression, 0 gives no compression at - all (the input data is simply copied a block at a time). - Z_DEFAULT_COMPRESSION requests a default compromise between speed and - compression (currently equivalent to level 6). + 1 gives best speed, 9 gives best compression, 0 gives no compression at all + (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION + requests a default compromise between speed and compression (currently + equivalent to level 6). - deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if level is not a valid compression level, + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if level is not a valid compression level, or Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible - with the version assumed by the caller (ZLIB_VERSION). - msg is set to null if there is no error message. deflateInit does not - perform any compression: this will be done by deflate(). + with the version assumed by the caller (ZLIB_VERSION). msg is set to null + if there is no error message. deflateInit does not perform any compression: + this will be done by deflate(). */ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); /* deflate compresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce some - output latency (reading input without producing any output) except when + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when forced to flush. - The detailed semantics are as follows. deflate performs one or both of the + The detailed semantics are as follows. deflate performs one or both of the following actions: - Compress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not + accordingly. If not all input can be processed (because there is not enough room in the output buffer), next_in and avail_in are updated and processing will resume at this point for the next call of deflate(). - Provide more output starting at next_out and update next_out and avail_out - accordingly. This action is forced if the parameter flush is non zero. + accordingly. This action is forced if the parameter flush is non zero. Forcing flush frequently degrades the compression ratio, so this parameter - should be set only when necessary (in interactive applications). - Some output may be provided even if flush is not set. + should be set only when necessary (in interactive applications). Some + output may be provided even if flush is not set. - Before the call of deflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating avail_in or avail_out accordingly; avail_out - should never be zero before the call. The application can consume the - compressed output when it wants, for example when the output buffer is full - (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK - and with zero avail_out, it must be called again after making room in the - output buffer because there might be more output pending. + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating avail_in or avail_out accordingly; avail_out should + never be zero before the call. The application can consume the compressed + output when it wants, for example when the output buffer is full (avail_out + == 0), or after each call of deflate(). If deflate returns Z_OK and with + zero avail_out, it must be called again after making room in the output + buffer because there might be more output pending. Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to - decide how much data to accumualte before producing output, in order to + decide how much data to accumulate before producing output, in order to maximize compression. If the parameter flush is set to Z_SYNC_FLUSH, all pending output is flushed to the output buffer and the output is aligned on a byte boundary, so - that the decompressor can get all input data available so far. (In particular - avail_in is zero after the call if enough output space has been provided - before the call.) Flushing may degrade compression for some compression - algorithms and so it should be used only when necessary. + that the decompressor can get all input data available so far. (In + particular avail_in is zero after the call if enough output space has been + provided before the call.) Flushing may degrade compression for some + compression algorithms and so it should be used only when necessary. This + completes the current deflate block and follows it with an empty stored block + that is three bits plus filler bits to the next byte, followed by four bytes + (00 00 ff ff). + + If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the + output buffer, but the output is not aligned to a byte boundary. All of the + input data so far will be available to the decompressor, as for Z_SYNC_FLUSH. + This completes the current deflate block and follows it with an empty fixed + codes block that is 10 bits long. This assures that enough bytes are output + in order for the decompressor to finish the block before the empty fixed code + block. + + If flush is set to Z_BLOCK, a deflate block is completed and emitted, as + for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to + seven bits of the current block are held to be written as the next byte after + the next deflate block is completed. In this case, the decompressor may not + be provided enough bits at this point in order to complete decompression of + the data provided so far to the compressor. It may need to wait for the next + block to be emitted. This is for advanced applications that need to control + the emission of deflate blocks. If flush is set to Z_FULL_FLUSH, all output is flushed as with Z_SYNC_FLUSH, and the compression state is reset so that decompression can restart from this point if previous compressed data has been damaged or if - random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade compression. If deflate returns with avail_out == 0, this function must be called again with the same value of the flush parameter and more output space (updated avail_out), until the flush is complete (deflate returns with non-zero - avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that avail_out is greater than six to avoid repeated flush markers due to avail_out == 0 on return. If the parameter flush is set to Z_FINISH, pending input is processed, - pending output is flushed and deflate returns with Z_STREAM_END if there - was enough output space; if deflate returns with Z_OK, this function must be + pending output is flushed and deflate returns with Z_STREAM_END if there was + enough output space; if deflate returns with Z_OK, this function must be called again with Z_FINISH and more output space (updated avail_out) but no - more input data, until it returns with Z_STREAM_END or an error. After - deflate has returned Z_STREAM_END, the only possible operations on the - stream are deflateReset or deflateEnd. + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the stream + are deflateReset or deflateEnd. Z_FINISH can be used immediately after deflateInit if all the compression - is to be done in a single step. In this case, avail_out must be at least - the value returned by deflateBound (see below). If deflate does not return + is to be done in a single step. In this case, avail_out must be at least the + value returned by deflateBound (see below). If deflate does not return Z_STREAM_END, then it must be called again as described above. deflate() sets strm->adler to the adler32 checksum of all input read so far (that is, total_in bytes). deflate() may update strm->data_type if it can make a good guess about - the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered - binary. This field is only for information purposes and does not affect - the compression algorithm in any manner. + the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered + binary. This field is only for information purposes and does not affect the + compression algorithm in any manner. deflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if all input has been consumed and all output has been produced (only when flush is set to Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example - if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible - (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not + if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and deflate() can be called again with more input and more output space to continue compressing. */ @@ -328,13 +352,13 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); /* All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. + This function discards any unprocessed input and does not flush any pending + output. deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state was inconsistent, Z_DATA_ERROR if the stream was freed - prematurely (some input or output was discarded). In the error case, - msg may be set but then points to a static string (which must not be + prematurely (some input or output was discarded). In the error case, msg + may be set but then points to a static string (which must not be deallocated). */ @@ -342,10 +366,10 @@ ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); /* ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); - Initializes the internal stream state for decompression. The fields + Initializes the internal stream state for decompression. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by - the caller. If next_in is not Z_NULL and avail_in is large enough (the exact - value depends on the compression method), inflateInit determines the + the caller. If next_in is not Z_NULL and avail_in is large enough (the + exact value depends on the compression method), inflateInit determines the compression method from the zlib header and allocates all data structures accordingly; otherwise the allocation will be deferred to the first call of inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to @@ -353,95 +377,108 @@ ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_VERSION_ERROR if the zlib library version is incompatible with the - version assumed by the caller. msg is set to null if there is no error - message. inflateInit does not perform any decompression apart from reading - the zlib header if present: this will be done by inflate(). (So next_in and - avail_in may be modified, but next_out and avail_out are unchanged.) + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit does not perform any decompression + apart from possibly reading the zlib header if present: actual decompression + will be done by inflate(). (So next_in and avail_in may be modified, but + next_out and avail_out are unused and unchanged.) The current implementation + of inflateInit() does not process any header information -- that is deferred + until inflate() is called. */ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); /* inflate decompresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce + buffer becomes empty or the output buffer becomes full. It may introduce some output latency (reading input without producing any output) except when forced to flush. - The detailed semantics are as follows. inflate performs one or both of the + The detailed semantics are as follows. inflate performs one or both of the following actions: - Decompress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), next_in is updated and processing - will resume at this point for the next call of inflate(). + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing will + resume at this point for the next call of inflate(). - Provide more output starting at next_out and update next_out and avail_out - accordingly. inflate() provides as much output as possible, until there - is no more input data or no more space in the output buffer (see below - about the flush parameter). + accordingly. inflate() provides as much output as possible, until there is + no more input data or no more space in the output buffer (see below about + the flush parameter). - Before the call of inflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating the next_* and avail_* values accordingly. - The application can consume the uncompressed output when it wants, for - example when the output buffer is full (avail_out == 0), or after each - call of inflate(). If inflate returns Z_OK and with zero avail_out, it - must be called again after making room in the output buffer because there - might be more output pending. + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating the next_* and avail_* values accordingly. The + application can consume the uncompressed output when it wants, for example + when the output buffer is full (avail_out == 0), or after each call of + inflate(). If inflate returns Z_OK and with zero avail_out, it must be + called again after making room in the output buffer because there might be + more output pending. - The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, - Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much - output as possible to the output buffer. Z_BLOCK requests that inflate() stop - if and when it gets to the next deflate block boundary. When decoding the - zlib or gzip format, this will cause inflate() to return immediately after - the header and before the first block. When doing a raw inflate, inflate() - will go ahead and process the first block, and will return when it gets to - the end of that block, or when it runs out of data. + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH, + Z_BLOCK, or Z_TREES. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() + stop if and when it gets to the next deflate block boundary. When decoding + the zlib or gzip format, this will cause inflate() to return immediately + after the header and before the first block. When doing a raw inflate, + inflate() will go ahead and process the first block, and will return when it + gets to the end of that block, or when it runs out of data. The Z_BLOCK option assists in appending to or combining deflate streams. Also to assist in this, on return inflate() will set strm->data_type to the - number of unused bits in the last byte taken from strm->next_in, plus 64 - if inflate() is currently decoding the last block in the deflate stream, - plus 128 if inflate() returned immediately after decoding an end-of-block - code or decoding the complete header up to just before the first byte of the - deflate stream. The end-of-block will not be indicated until all of the - uncompressed data from that block has been written to strm->next_out. The - number of unused bits may in general be greater than seven, except when - bit 7 of data_type is set, in which case the number of unused bits will be - less than eight. + number of unused bits in the last byte taken from strm->next_in, plus 64 if + inflate() is currently decoding the last block in the deflate stream, plus + 128 if inflate() returned immediately after decoding an end-of-block code or + decoding the complete header up to just before the first byte of the deflate + stream. The end-of-block will not be indicated until all of the uncompressed + data from that block has been written to strm->next_out. The number of + unused bits may in general be greater than seven, except when bit 7 of + data_type is set, in which case the number of unused bits will be less than + eight. data_type is set as noted here every time inflate() returns for all + flush options, and so can be used to determine the amount of currently + consumed input in bits. + + The Z_TREES option behaves as Z_BLOCK does, but it also returns when the + end of each deflate block header is reached, before any actual data in that + block is decoded. This allows the caller to determine the length of the + deflate block header for later use in random access within a deflate block. + 256 is added to the value of strm->data_type when inflate() returns + immediately after reaching the end of the deflate block header. inflate() should normally be called until it returns Z_STREAM_END or an - error. However if all decompression is to be performed in a single step - (a single call of inflate), the parameter flush should be set to - Z_FINISH. In this case all pending input is processed and all pending - output is flushed; avail_out must be large enough to hold all the - uncompressed data. (The size of the uncompressed data may have been saved - by the compressor for this purpose.) The next operation on this stream must - be inflateEnd to deallocate the decompression state. The use of Z_FINISH - is never required, but can be used to inform inflate that a faster approach - may be used for the single inflate() call. + error. However if all decompression is to be performed in a single step (a + single call of inflate), the parameter flush should be set to Z_FINISH. In + this case all pending input is processed and all pending output is flushed; + avail_out must be large enough to hold all the uncompressed data. (The size + of the uncompressed data may have been saved by the compressor for this + purpose.) The next operation on this stream must be inflateEnd to deallocate + the decompression state. The use of Z_FINISH is never required, but can be + used to inform inflate that a faster approach may be used for the single + inflate() call. In this implementation, inflate() always flushes as much output as possible to the output buffer, and always uses the faster approach on the - first call. So the only effect of the flush parameter in this implementation + first call. So the only effect of the flush parameter in this implementation is on the return value of inflate(), as noted below, or when it returns early - because Z_BLOCK is used. + because Z_BLOCK or Z_TREES is used. If a preset dictionary is needed after this call (see inflateSetDictionary below), inflate sets strm->adler to the adler32 checksum of the dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise it sets strm->adler to the adler32 checksum of all output produced so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described - below. At the end of the stream, inflate() checks that its computed adler32 + below. At the end of the stream, inflate() checks that its computed adler32 checksum is equal to that saved by the compressor and returns Z_STREAM_END only if the checksum is correct. - inflate() will decompress and check either zlib-wrapped or gzip-wrapped - deflate data. The header type is detected automatically. Any information - contained in the gzip header is not retained, so applications that need that - information should instead use raw inflate, see inflateInit2() below, or - inflateBack() and perform their own processing of the gzip header and - trailer. + inflate() can decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically, if requested when + initializing with inflateInit2(). Any information contained in the gzip + header is not retained, so applications that need that information should + instead use raw inflate, see inflateInit2() below, or inflateBack() and + perform their own processing of the gzip header and trailer. inflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if the end of the compressed data has @@ -449,27 +486,28 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); preset dictionary is needed at this point, Z_DATA_ERROR if the input data was corrupted (input stream not conforming to the zlib format or incorrect check value), Z_STREAM_ERROR if the stream structure was inconsistent (for example - if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, + next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if no progress is possible or if there was not enough room in the - output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and inflate() can be called again with more input and more output space to - continue decompressing. If Z_DATA_ERROR is returned, the application may then - call inflateSync() to look for a good compression block if a partial recovery - of the data is desired. + continue decompressing. If Z_DATA_ERROR is returned, the application may + then call inflateSync() to look for a good compression block if a partial + recovery of the data is desired. */ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); /* All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. + This function discards any unprocessed input and does not flush any pending + output. inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state - was inconsistent. In the error case, msg may be set but then points to a + was inconsistent. In the error case, msg may be set but then points to a static string (which must not be deallocated). */ + /* Advanced functions */ /* @@ -484,55 +522,57 @@ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, int memLevel, int strategy)); - This is another version of deflateInit with more compression options. The - fields next_in, zalloc, zfree and opaque must be initialized before by - the caller. + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by the + caller. - The method parameter is the compression method. It must be Z_DEFLATED in + The method parameter is the compression method. It must be Z_DEFLATED in this version of the library. The windowBits parameter is the base two logarithm of the window size - (the size of the history buffer). It should be in the range 8..15 for this - version of the library. Larger values of this parameter result in better - compression at the expense of memory usage. The default value is 15 if + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if deflateInit is used instead. - windowBits can also be -8..-15 for raw deflate. In this case, -windowBits - determines the window size. deflate() will then generate raw deflate data + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data with no zlib header or trailer, and will not compute an adler32 check value. - windowBits can also be greater than 15 for optional gzip encoding. Add + windowBits can also be greater than 15 for optional gzip encoding. Add 16 to windowBits to write a simple gzip header and trailer around the - compressed data instead of a zlib wrapper. The gzip header will have no - file name, no extra data, no comment, no modification time (set to zero), - no header crc, and the operating system will be set to 255 (unknown). If a + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), no + header crc, and the operating system will be set to 255 (unknown). If a gzip stream is being written, strm->adler is a crc32 instead of an adler32. The memLevel parameter specifies how much memory should be allocated - for the internal compression state. memLevel=1 uses minimum memory but - is slow and reduces compression ratio; memLevel=9 uses maximum memory - for optimal speed. The default value is 8. See zconf.h for total memory - usage as a function of windowBits and memLevel. + for the internal compression state. memLevel=1 uses minimum memory but is + slow and reduces compression ratio; memLevel=9 uses maximum memory for + optimal speed. The default value is 8. See zconf.h for total memory usage + as a function of windowBits and memLevel. - The strategy parameter is used to tune the compression algorithm. Use the + The strategy parameter is used to tune the compression algorithm. Use the value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no string match), or Z_RLE to limit match distances to one (run-length - encoding). Filtered data consists mostly of small values with a somewhat - random distribution. In this case, the compression algorithm is tuned to - compress them better. The effect of Z_FILTERED is to force more Huffman + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman coding and less string matching; it is somewhat intermediate between - Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as - Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy - parameter only affects the compression ratio but not the correctness of the - compressed output even if it is not set appropriately. Z_FIXED prevents the - use of dynamic Huffman codes, allowing for a simpler decoder for special - applications. + Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as + fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The + strategy parameter only affects the compression ratio but not the + correctness of the compressed output even if it is not set appropriately. + Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler + decoder for special applications. - deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid - method). msg is set to null if there is no error message. deflateInit2 does - not perform any compression: this will be done by deflate(). + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid + method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is + incompatible with the version assumed by the caller (ZLIB_VERSION). msg is + set to null if there is no error message. deflateInit2 does not perform any + compression: this will be done by deflate(). */ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, @@ -540,37 +580,37 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, uInt dictLength)); /* Initializes the compression dictionary from the given byte sequence - without producing any compressed output. This function must be called - immediately after deflateInit, deflateInit2 or deflateReset, before any - call of deflate. The compressor and decompressor must use exactly the same + without producing any compressed output. This function must be called + immediately after deflateInit, deflateInit2 or deflateReset, before any call + of deflate. The compressor and decompressor must use exactly the same dictionary (see inflateSetDictionary). The dictionary should consist of strings (byte sequences) that are likely to be encountered later in the data to be compressed, with the most commonly - used strings preferably put towards the end of the dictionary. Using a + used strings preferably put towards the end of the dictionary. Using a dictionary is most useful when the data to be compressed is short and can be predicted with good accuracy; the data can then be compressed better than with the default empty dictionary. Depending on the size of the compression data structures selected by deflateInit or deflateInit2, a part of the dictionary may in effect be - discarded, for example if the dictionary is larger than the window size in - deflate or deflate2. Thus the strings most likely to be useful should be - put at the end of the dictionary, not at the front. In addition, the - current implementation of deflate will use at most the window size minus - 262 bytes of the provided dictionary. + discarded, for example if the dictionary is larger than the window size + provided in deflateInit or deflateInit2. Thus the strings most likely to be + useful should be put at the end of the dictionary, not at the front. In + addition, the current implementation of deflate will use at most the window + size minus 262 bytes of the provided dictionary. Upon return of this function, strm->adler is set to the adler32 value of the dictionary; the decompressor may later use this value to determine - which dictionary has been used by the compressor. (The adler32 value + which dictionary has been used by the compressor. (The adler32 value applies to the whole dictionary even if only a subset of the dictionary is actually used by the compressor.) If a raw deflate was requested, then the adler32 value is not computed and strm->adler is not set. deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is inconsistent (for example if deflate has already been called for this stream - or if the compression method is bsort). deflateSetDictionary does not + or if the compression method is bsort). deflateSetDictionary does not perform any compression: this will be done by deflate(). */ @@ -581,26 +621,26 @@ ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, This function can be useful when several compression strategies will be tried, for example when there are several ways of pre-processing the input - data with a filter. The streams that will be discarded should then be freed + data with a filter. The streams that will be discarded should then be freed by calling deflateEnd. Note that deflateCopy duplicates the internal - compression state which can be quite large, so this strategy is slow and - can consume lots of memory. + compression state which can be quite large, so this strategy is slow and can + consume lots of memory. deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if the source stream state was inconsistent - (such as zalloc being NULL). msg is left unchanged in both source and + (such as zalloc being Z_NULL). msg is left unchanged in both source and destination. */ ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); /* This function is equivalent to deflateEnd followed by deflateInit, - but does not free and reallocate all the internal compression state. - The stream will keep the same compression level and any other attributes - that may have been set by deflateInit2. + but does not free and reallocate all the internal compression state. The + stream will keep the same compression level and any other attributes that + may have been set by deflateInit2. - deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). */ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, @@ -610,18 +650,18 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, Dynamically update the compression level and compression strategy. The interpretation of level and strategy is as in deflateInit2. This can be used to switch between compression and straight copy of the input data, or - to switch to a different kind of input data requiring a different - strategy. If the compression level is changed, the input available so far - is compressed with the old level (and may be flushed); the new level will - take effect only at the next call of deflate(). + to switch to a different kind of input data requiring a different strategy. + If the compression level is changed, the input available so far is + compressed with the old level (and may be flushed); the new level will take + effect only at the next call of deflate(). Before the call of deflateParams, the stream state must be set as for - a call of deflate(), since the currently available input may have to - be compressed and flushed. In particular, strm->avail_out must be non-zero. + a call of deflate(), since the currently available input may have to be + compressed and flushed. In particular, strm->avail_out must be non-zero. deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source - stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR - if strm->avail_out was zero. + stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if + strm->avail_out was zero. */ ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, @@ -645,9 +685,10 @@ ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, uLong sourceLen)); /* deflateBound() returns an upper bound on the compressed size after - deflation of sourceLen bytes. It must be called after deflateInit() - or deflateInit2(). This would be used to allocate an output buffer - for deflation in a single pass, and so would be called before deflate(). + deflation of sourceLen bytes. It must be called after deflateInit() or + deflateInit2(), and after deflateSetHeader(), if used. This would be used + to allocate an output buffer for deflation in a single pass, and so would be + called before deflate(). */ ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, @@ -655,21 +696,21 @@ ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, int value)); /* deflatePrime() inserts bits in the deflate output stream. The intent - is that this function is used to start off the deflate output with the - bits leftover from a previous deflate stream when appending to it. As such, - this function can only be used for raw deflate, and must be used before the - first deflate() call after a deflateInit2() or deflateReset(). bits must be - less than or equal to 16, and that many of the least significant bits of - value will be inserted in the output. + is that this function is used to start off the deflate output with the bits + leftover from a previous deflate stream when appending to it. As such, this + function can only be used for raw deflate, and must be used before the first + deflate() call after a deflateInit2() or deflateReset(). bits must be less + than or equal to 16, and that many of the least significant bits of value + will be inserted in the output. - deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, gz_headerp head)); /* - deflateSetHeader() provides gzip header information for when a gzip + deflateSetHeader() provides gzip header information for when a gzip stream is requested by deflateInit2(). deflateSetHeader() may be called after deflateInit2() or deflateReset() and before the first call of deflate(). The text, time, os, extra field, name, and comment information @@ -682,11 +723,11 @@ ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, 1.3.x) do not support header crc's, and will report that it is a "multi-part gzip file" and give up. - If deflateSetHeader is not used, the default gzip header has text false, + If deflateSetHeader is not used, the default gzip header has text false, the time set to zero, and os set to 255, with no extra, name, or comment fields. The gzip header is returned to the default state by deflateReset(). - deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ @@ -694,43 +735,50 @@ ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, int windowBits)); - This is another version of inflateInit with an extra parameter. The + This is another version of inflateInit with an extra parameter. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by the caller. The windowBits parameter is the base two logarithm of the maximum window size (the size of the history buffer). It should be in the range 8..15 for - this version of the library. The default value is 15 if inflateInit is used - instead. windowBits must be greater than or equal to the windowBits value + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value provided to deflateInit2() while compressing, or it must be equal to 15 if - deflateInit2() was not used. If a compressed stream with a larger window + deflateInit2() was not used. If a compressed stream with a larger window size is given as input, inflate() will return with the error code Z_DATA_ERROR instead of trying to allocate a larger window. - windowBits can also be -8..-15 for raw inflate. In this case, -windowBits - determines the window size. inflate() will then process raw deflate data, + windowBits can also be zero to request that inflate use the window size in + the zlib header of the compressed stream. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, not looking for a zlib or gzip header, not generating a check value, and not - looking for any check values for comparison at the end of the stream. This + looking for any check values for comparison at the end of the stream. This is for use with other formats that use the deflate compressed data format - such as zip. Those formats provide their own check values. If a custom + such as zip. Those formats provide their own check values. If a custom format is developed using the raw deflate format for compressed data, it is recommended that a check value such as an adler32 or a crc32 be applied to the uncompressed data as is done in the zlib, gzip, and zip formats. For - most applications, the zlib format should be used as is. Note that comments + most applications, the zlib format should be used as is. Note that comments above on the use in deflateInit2() applies to the magnitude of windowBits. - windowBits can also be greater than 15 for optional gzip decoding. Add + windowBits can also be greater than 15 for optional gzip decoding. Add 32 to windowBits to enable zlib and gzip decoding with automatic header detection, or add 16 to decode only the gzip format (the zlib format will - return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is - a crc32 instead of an adler32. + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a + crc32 instead of an adler32. inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg - is set to null if there is no error message. inflateInit2 does not perform - any decompression apart from reading the zlib header if present: this will - be done by inflate(). (So next_in and avail_in may be modified, but next_out - and avail_out are unchanged.) + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit2 does not perform any decompression + apart from possibly reading the zlib header if present: actual decompression + will be done by inflate(). (So next_in and avail_in may be modified, but + next_out and avail_out are unused and unchanged.) The current implementation + of inflateInit2() does not process any header information -- that is + deferred until inflate() is called. */ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, @@ -738,8 +786,8 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, uInt dictLength)); /* Initializes the decompression dictionary from the given uncompressed byte - sequence. This function must be called immediately after a call of inflate, - if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor can be determined from the adler32 value returned by that call of inflate. The compressor and decompressor must use exactly the same dictionary (see deflateSetDictionary). For raw inflate, this function can be called @@ -748,26 +796,26 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, dictionary that was used for compression is provided. inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the - expected one (incorrect adler32 value). inflateSetDictionary does not + expected one (incorrect adler32 value). inflateSetDictionary does not perform any decompression: this will be done by subsequent calls of inflate(). */ ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); /* - Skips invalid compressed data until a full flush point (see above the - description of deflate with Z_FULL_FLUSH) can be found, or until all - available input is skipped. No output is provided. + Skips invalid compressed data until a full flush point (see above the + description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. - inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR - if no more input was provided, Z_DATA_ERROR if no flush point has been found, - or Z_STREAM_ERROR if the stream structure was inconsistent. In the success - case, the application may save the current current value of total_in which - indicates where valid compressed data was found. In the error case, the - application may repeatedly call inflateSync, providing more input each time, - until success or end of the input data. + inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR + if no more input was provided, Z_DATA_ERROR if no flush point has been + found, or Z_STREAM_ERROR if the stream structure was inconsistent. In the + success case, the application may save the current current value of total_in + which indicates where valid compressed data was found. In the error case, + the application may repeatedly call inflateSync, providing more input each + time, until success or end of the input data. */ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, @@ -782,18 +830,30 @@ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if the source stream state was inconsistent - (such as zalloc being NULL). msg is left unchanged in both source and + (such as zalloc being Z_NULL). msg is left unchanged in both source and destination. */ ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); /* This function is equivalent to inflateEnd followed by inflateInit, - but does not free and reallocate all the internal decompression state. - The stream will keep attributes that may have been set by inflateInit2. + but does not free and reallocate all the internal decompression state. The + stream will keep attributes that may have been set by inflateInit2. - inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, + int windowBits)); +/* + This function is the same as inflateReset, but it also permits changing + the wrap and window size requests. The windowBits parameter is interpreted + the same as it is for inflateInit2. + + inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL), or if + the windowBits parameter is invalid. */ ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, @@ -801,54 +861,87 @@ ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, int value)); /* This function inserts bits in the inflate input stream. The intent is - that this function is used to start inflating at a bit position in the - middle of a byte. The provided bits will be used before any bytes are used - from next_in. This function should only be used with raw inflate, and - should be used before the first inflate() call after inflateInit2() or - inflateReset(). bits must be less than or equal to 16, and that many of the - least significant bits of value will be inserted in the input. + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. - inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + If bits is negative, then the input stream bit buffer is emptied. Then + inflatePrime() can be called again to put bits in the buffer. This is used + to clear out bits leftover after feeding inflate a block description prior + to feeding inflate codes. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ +ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); +/* + This function returns two values, one in the lower 16 bits of the return + value, and the other in the remaining upper bits, obtained by shifting the + return value down 16 bits. If the upper value is -1 and the lower value is + zero, then inflate() is currently decoding information outside of a block. + If the upper value is -1 and the lower value is non-zero, then inflate is in + the middle of a stored block, with the lower value equaling the number of + bytes from the input remaining to copy. If the upper value is not -1, then + it is the number of bits back from the current bit position in the input of + the code (literal or length/distance pair) currently being processed. In + that case the lower value is the number of bytes already emitted for that + code. + + A code is being processed if inflate is waiting for more input to complete + decoding of the code, or if it has completed decoding but is waiting for + more output space to write the literal or match data. + + inflateMark() is used to mark locations in the input data for random + access, which may be at bit positions, and to note those cases where the + output of a code may span boundaries of random access blocks. The current + location in the input stream can be determined from avail_in and data_type + as noted in the description for the Z_BLOCK flush parameter for inflate. + + inflateMark returns the value noted above or -1 << 16 if the provided + source stream state was inconsistent. +*/ + ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, gz_headerp head)); /* - inflateGetHeader() requests that gzip header information be stored in the + inflateGetHeader() requests that gzip header information be stored in the provided gz_header structure. inflateGetHeader() may be called after inflateInit2() or inflateReset(), and before the first call of inflate(). As inflate() processes the gzip stream, head->done is zero until the header is completed, at which time head->done is set to one. If a zlib stream is being decoded, then head->done is set to -1 to indicate that there will be - no gzip header information forthcoming. Note that Z_BLOCK can be used to - force inflate() to return immediately after header processing is complete - and before any actual data is decompressed. + no gzip header information forthcoming. Note that Z_BLOCK or Z_TREES can be + used to force inflate() to return immediately after header processing is + complete and before any actual data is decompressed. - The text, time, xflags, and os fields are filled in with the gzip header + The text, time, xflags, and os fields are filled in with the gzip header contents. hcrc is set to true if there is a header CRC. (The header CRC - was valid if done is set to one.) If extra is not Z_NULL, then extra_max + was valid if done is set to one.) If extra is not Z_NULL, then extra_max contains the maximum number of bytes to write to extra. Once done is true, extra_len contains the actual extra field length, and extra contains the extra field, or that field truncated if extra_max is less than extra_len. If name is not Z_NULL, then up to name_max characters are written there, terminated with a zero unless the length is greater than name_max. If comment is not Z_NULL, then up to comm_max characters are written there, - terminated with a zero unless the length is greater than comm_max. When - any of extra, name, or comment are not Z_NULL and the respective field is - not present in the header, then that field is set to Z_NULL to signal its + terminated with a zero unless the length is greater than comm_max. When any + of extra, name, or comment are not Z_NULL and the respective field is not + present in the header, then that field is set to Z_NULL to signal its absence. This allows the use of deflateSetHeader() with the returned structure to duplicate the header. However if those fields are set to allocated memory, then the application will need to save those pointers elsewhere so that they can be eventually freed. - If inflateGetHeader is not used, then the header information is simply + If inflateGetHeader is not used, then the header information is simply discarded. The header is always checked for validity, including the header CRC if present. inflateReset() will reset the process to discard the header information. The application would need to call inflateGetHeader() again to retrieve the header from the next gzip stream. - inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ @@ -869,9 +962,9 @@ ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, See inflateBack() for the usage of these routines. inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of - the paramaters are invalid, Z_MEM_ERROR if the internal state could not - be allocated, or Z_VERSION_ERROR if the version of the library does not - match the version of the header file. + the paramaters are invalid, Z_MEM_ERROR if the internal state could not be + allocated, or Z_VERSION_ERROR if the version of the library does not match + the version of the header file. */ typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); @@ -891,15 +984,15 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, inflateBackInit() must be called first to allocate the internal state and to initialize the state with the user-provided window buffer. inflateBack() may then be used multiple times to inflate a complete, raw - deflate stream with each call. inflateBackEnd() is then called to free - the allocated state. + deflate stream with each call. inflateBackEnd() is then called to free the + allocated state. A raw deflate stream is one with no zlib or gzip header or trailer. This routine would normally be used in a utility that reads zip or gzip files and writes out uncompressed files. The utility would decode the - header and process the trailer on its own, hence this routine expects - only the raw deflate stream to decompress. This is different from the - normal behavior of inflate(), which expects either a zlib or gzip header and + header and process the trailer on its own, hence this routine expects only + the raw deflate stream to decompress. This is different from the normal + behavior of inflate(), which expects either a zlib or gzip header and trailer around the deflate stream. inflateBack() uses two subroutines supplied by the caller that are then @@ -925,7 +1018,7 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in must also be initialized, and then if strm->avail_in is not zero, input will - initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. The in_desc and out_desc parameters of inflateBack() is passed as the first parameter of in() and out() respectively when they are called. These @@ -935,15 +1028,15 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, On return, inflateBack() will set strm->next_in and strm->avail_in to pass back any unused input that was provided by the last in() call. The return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR - if in() or out() returned an error, Z_DATA_ERROR if there was a format - error in the deflate stream (in which case strm->msg is set to indicate the - nature of the error), or Z_STREAM_ERROR if the stream was not properly - initialized. In the case of Z_BUF_ERROR, an input or output error can be - distinguished using strm->next_in which will be Z_NULL only if in() returned - an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to - out() returning non-zero. (in() will always be called before out(), so - strm->next_in is assured to be defined if out() returns non-zero.) Note - that inflateBack() cannot return Z_OK. + if in() or out() returned an error, Z_DATA_ERROR if there was a format error + in the deflate stream (in which case strm->msg is set to indicate the nature + of the error), or Z_STREAM_ERROR if the stream was not properly initialized. + In the case of Z_BUF_ERROR, an input or output error can be distinguished + using strm->next_in which will be Z_NULL only if in() returned an error. If + strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning + non-zero. (in() will always be called before out(), so strm->next_in is + assured to be defined if out() returns non-zero.) Note that inflateBack() + cannot return Z_OK. */ ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); @@ -999,23 +1092,22 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); /* utility functions */ /* - The following utility functions are implemented on top of the - basic stream-oriented functions. To simplify the interface, some - default options are assumed (compression level and memory usage, - standard memory allocation functions). The source code of these - utility functions can easily be modified if you need special options. + The following utility functions are implemented on top of the basic + stream-oriented functions. To simplify the interface, some default options + are assumed (compression level and memory usage, standard memory allocation + functions). The source code of these utility functions can be modified if + you need special options. */ ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)); /* Compresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be at least the value returned - by compressBound(sourceLen). Upon exit, destLen is the actual size of the + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the compressed buffer. - This function can be used to compress a whole file at once if the - input file is mmap'ed. + compress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer. @@ -1025,11 +1117,11 @@ ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level)); /* - Compresses the source buffer into the destination buffer. The level + Compresses the source buffer into the destination buffer. The level parameter has the same meaning as in deflateInit. sourceLen is the byte - length of the source buffer. Upon entry, destLen is the total size of the + length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be at least the value returned by - compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressBound(sourceLen). Upon exit, destLen is the actual size of the compressed buffer. compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough @@ -1040,22 +1132,20 @@ ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); /* compressBound() returns an upper bound on the compressed size after - compress() or compress2() on sourceLen bytes. It would be used before - a compress() or compress2() call to allocate the destination buffer. + compress() or compress2() on sourceLen bytes. It would be used before a + compress() or compress2() call to allocate the destination buffer. */ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)); /* Decompresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be large enough to hold the - entire uncompressed data. (The size of the uncompressed data must have - been saved previously by the compressor and transmitted to the decompressor - by some mechanism outside the scope of this compression library.) - Upon exit, destLen is the actual size of the compressed buffer. - This function can be used to decompress a whole file at once if the - input file is mmap'ed. + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be large enough to hold the entire + uncompressed data. (The size of the uncompressed data must have been saved + previously by the compressor and transmitted to the decompressor by some + mechanism outside the scope of this compression library.) Upon exit, destLen + is the actual size of the uncompressed buffer. uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output @@ -1063,136 +1153,199 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, */ -typedef voidp gzFile; + /* gzip file access functions */ -ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); /* - Opens a gzip (.gz) file for reading or writing. The mode parameter - is as in fopen ("rb" or "wb") but can also include a compression level - ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for - Huffman only compression as in "wb1h", or 'R' for run-length encoding - as in "wb1R". (See the description of deflateInit2 for more information - about the strategy parameter.) + This library supports reading and writing files in gzip (.gz) format with + an interface similar to that of stdio, using the functions that start with + "gz". The gzip format is different from the zlib format. gzip is a gzip + wrapper, documented in RFC 1952, wrapped around a deflate stream. +*/ + +typedef voidp gzFile; /* opaque gzip file descriptor */ + +/* +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); + + Opens a gzip (.gz) file for reading or writing. The mode parameter is as + in fopen ("rb" or "wb") but can also include a compression level ("wb9") or + a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only + compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F' + for fixed code compression as in "wb9F". (See the description of + deflateInit2 for more information about the strategy parameter.) Also "a" + can be used instead of "w" to request that the gzip stream that will be + written be appended to the file. "+" will result in an error, since reading + and writing to the same gzip file is not supported. gzopen can be used to read a file which is not in gzip format; in this case gzread will directly read from the file without decompression. - gzopen returns NULL if the file could not be opened or if there was - insufficient memory to allocate the (de)compression state; errno - can be checked to distinguish the two cases (if errno is zero, the - zlib error is Z_MEM_ERROR). */ + gzopen returns NULL if the file could not be opened, if there was + insufficient memory to allocate the gzFile state, or if an invalid mode was + specified (an 'r', 'w', or 'a' was not provided, or '+' was provided). + errno can be checked to determine if the reason gzopen failed was that the + file could not be opened. +*/ -ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); /* - gzdopen() associates a gzFile with the file descriptor fd. File - descriptors are obtained from calls like open, dup, creat, pipe or - fileno (in the file has been previously opened with fopen). - The mode parameter is as in gzopen. - The next call of gzclose on the returned gzFile will also close the - file descriptor fd, just like fclose(fdopen(fd), mode) closes the file - descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). - gzdopen returns NULL if there was insufficient memory to allocate - the (de)compression state. + gzdopen associates a gzFile with the file descriptor fd. File descriptors + are obtained from calls like open, dup, creat, pipe or fileno (if the file + has been previously opened with fopen). The mode parameter is as in gzopen. + + The next call of gzclose on the returned gzFile will also close the file + descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor + fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd, + mode);. The duplicated descriptor should be saved to avoid a leak, since + gzdopen does not close fd if it fails. + + gzdopen returns NULL if there was insufficient memory to allocate the + gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not + provided, or '+' was provided), or if fd is -1. The file descriptor is not + used until the next gz* read, write, seek, or close operation, so gzdopen + will not detect if fd is invalid (unless fd is -1). +*/ + +ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); +/* + Set the internal buffer size used by this library's functions. The + default buffer size is 8192 bytes. This function must be called after + gzopen() or gzdopen(), and before any other calls that read or write the + file. The buffer memory allocation is always deferred to the first read or + write. Two buffers are allocated, either both of the specified size when + writing, or one of the specified size and the other twice that size when + reading. A larger buffer size of, for example, 64K or 128K bytes will + noticeably increase the speed of decompression (reading). + + The new buffer size also affects the maximum length for gzprintf(). + + gzbuffer() returns 0 on success, or -1 on failure, such as being called + too late. */ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); /* - Dynamically update the compression level or strategy. See the description + Dynamically update the compression level or strategy. See the description of deflateInit2 for the meaning of these parameters. + gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not opened for writing. */ -ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); /* - Reads the given number of uncompressed bytes from the compressed file. - If the input file was not in gzip format, gzread copies the given number - of bytes into the buffer. - gzread returns the number of uncompressed bytes actually read (0 for - end of file, -1 for error). */ + Reads the given number of uncompressed bytes from the compressed file. If + the input file was not in gzip format, gzread copies the given number of + bytes into the buffer. -ZEXTERN int ZEXPORT gzwrite OF((gzFile file, - voidpc buf, unsigned len)); -/* - Writes the given number of uncompressed bytes into the compressed file. - gzwrite returns the number of uncompressed bytes actually written - (0 in case of error). + After reaching the end of a gzip stream in the input, gzread will continue + to read, looking for another gzip stream, or failing that, reading the rest + of the input file directly without decompression. The entire input file + will be read if gzread is called until it returns less than the requested + len. + + gzread returns the number of uncompressed bytes actually read, less than + len for end of file, or -1 for error. */ -ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + voidpc buf, unsigned len)); /* - Converts, formats, and writes the args to the compressed file under - control of the format string, as in fprintf. gzprintf returns the number of - uncompressed bytes actually written (0 in case of error). The number of - uncompressed bytes written is limited to 4095. The caller should assure that - this limit is not exceeded. If it is exceeded, then gzprintf() will return - return an error (0) with nothing written. In this case, there may also be a - buffer overflow with unpredictable consequences, which is possible only if - zlib was compiled with the insecure functions sprintf() or vsprintf() - because the secure snprintf() or vsnprintf() functions were not available. + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of uncompressed bytes written or 0 in case of + error. +*/ + +ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +/* + Converts, formats, and writes the arguments to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written, or 0 in case of error. The number of + uncompressed bytes written is limited to 8191, or one less than the buffer + size given to gzbuffer(). The caller should assure that this limit is not + exceeded. If it is exceeded, then gzprintf() will return an error (0) with + nothing written. In this case, there may also be a buffer overflow with + unpredictable consequences, which is possible only if zlib was compiled with + the insecure functions sprintf() or vsprintf() because the secure snprintf() + or vsnprintf() functions were not available. This can be determined using + zlibCompileFlags(). */ ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); /* - Writes the given null-terminated string to the compressed file, excluding + Writes the given null-terminated string to the compressed file, excluding the terminating null character. - gzputs returns the number of characters written, or -1 in case of error. + + gzputs returns the number of characters written, or -1 in case of error. */ ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); /* - Reads bytes from the compressed file until len-1 characters are read, or - a newline character is read and transferred to buf, or an end-of-file - condition is encountered. The string is then terminated with a null - character. - gzgets returns buf, or Z_NULL in case of error. + Reads bytes from the compressed file until len-1 characters are read, or a + newline character is read and transferred to buf, or an end-of-file + condition is encountered. If any characters are read or if len == 1, the + string is terminated with a null character. If no characters are read due + to an end-of-file or len < 1, then the buffer is left untouched. + + gzgets returns buf which is a null-terminated string, or it returns NULL + for end-of-file or in case of error. If there was an error, the contents at + buf are indeterminate. */ -ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); /* - Writes c, converted to an unsigned char, into the compressed file. - gzputc returns the value that was written, or -1 in case of error. + Writes c, converted to an unsigned char, into the compressed file. gzputc + returns the value that was written, or -1 in case of error. */ -ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); /* - Reads one byte from the compressed file. gzgetc returns this byte - or -1 in case of end of file or error. + Reads one byte from the compressed file. gzgetc returns this byte or -1 + in case of end of file or error. */ -ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); /* - Push one character back onto the stream to be read again later. - Only one character of push-back is allowed. gzungetc() returns the - character pushed, or -1 on failure. gzungetc() will fail if a - character has been pushed but not read yet, or if c is -1. The pushed - character will be discarded if the stream is repositioned with gzseek() - or gzrewind(). + Push one character back onto the stream to be read as the first character + on the next read. At least one character of push-back is allowed. + gzungetc() returns the character pushed, or -1 on failure. gzungetc() will + fail if c is -1, and may fail if a character has been pushed but not read + yet. If gzungetc is used immediately after gzopen or gzdopen, at least the + output buffer size of pushed characters is allowed. (See gzbuffer above.) + The pushed character will be discarded if the stream is repositioned with + gzseek() or gzrewind(). */ -ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); /* - Flushes all pending output into the compressed file. The parameter - flush is as in the deflate() function. The return value is the zlib - error number (see function gzerror below). gzflush returns Z_OK if - the flush parameter is Z_FINISH and all output could be flushed. - gzflush should be called only when strictly necessary because it can - degrade compression. + Flushes all pending output into the compressed file. The parameter flush + is as in the deflate() function. The return value is the zlib error number + (see function gzerror below). gzflush is only permitted when writing. + + If the flush parameter is Z_FINISH, the remaining data is written and the + gzip stream is completed in the output. If gzwrite() is called again, a new + gzip stream will be started in the output. gzread() is able to read such + concatented gzip streams. + + gzflush should be called only when strictly necessary because it will + degrade compression if called too often. */ -ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, - z_off_t offset, int whence)); /* - Sets the starting position for the next gzread or gzwrite on the - given compressed file. The offset represents a number of bytes in the - uncompressed data stream. The whence parameter is defined as in lseek(2); +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); + + Sets the starting position for the next gzread or gzwrite on the given + compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); the value SEEK_END is not supported. + If the file is opened for reading, this function is emulated but can be - extremely slow. If the file is opened for writing, only forward seeks are + extremely slow. If the file is opened for writing, only forward seeks are supported; gzseek then compresses a sequence of zeroes up to the new starting position. - gzseek returns the resulting offset location as measured in bytes from + gzseek returns the resulting offset location as measured in bytes from the beginning of the uncompressed stream, or -1 in case of error, in particular if the file is opened for writing and the new starting position would be before the current position. @@ -1202,68 +1355,127 @@ ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); /* Rewinds the given file. This function is supported only for reading. - gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) */ -ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); /* - Returns the starting position for the next gzread or gzwrite on the - given compressed file. This position represents a number of bytes in the - uncompressed data stream. +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); - gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) + Returns the starting position for the next gzread or gzwrite on the given + compressed file. This position represents a number of bytes in the + uncompressed data stream, and is zero when starting, even if appending or + reading a gzip stream from the middle of a file using gzdopen(). + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); + + Returns the current offset in the file being read or written. This offset + includes the count of bytes that precede the gzip stream, for example when + appending or when using gzdopen() for reading. When reading, the offset + does not include as yet unused buffered input. This information can be used + for a progress indicator. On error, gzoffset() returns -1. */ ZEXTERN int ZEXPORT gzeof OF((gzFile file)); /* - Returns 1 when EOF has previously been detected reading the given - input stream, otherwise zero. + Returns true (1) if the end-of-file indicator has been set while reading, + false (0) otherwise. Note that the end-of-file indicator is set only if the + read tried to go past the end of the input, but came up short. Therefore, + just like feof(), gzeof() may return false even if there is no more data to + read, in the event that the last read request was for the exact number of + bytes remaining in the input file. This will happen if the input file size + is an exact multiple of the buffer size. + + If gzeof() returns true, then the read functions will return no more data, + unless the end-of-file indicator is reset by gzclearerr() and the input file + has grown since the previous end of file was detected. */ ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); /* - Returns 1 if file is being read directly without decompression, otherwise - zero. + Returns true (1) if file is being copied directly while reading, or false + (0) if file is a gzip stream being decompressed. This state can change from + false to true while reading the input file if the end of a gzip stream is + reached, but is followed by data that is not another gzip stream. + + If the input file is empty, gzdirect() will return true, since the input + does not contain a gzip stream. + + If gzdirect() is used immediately after gzopen() or gzdopen() it will + cause buffers to be allocated to allow reading the file to determine if it + is a gzip file. Therefore if gzbuffer() is used, it should be called before + gzdirect(). */ ZEXTERN int ZEXPORT gzclose OF((gzFile file)); /* - Flushes all pending output if necessary, closes the compressed file - and deallocates all the (de)compression state. The return value is the zlib - error number (see function gzerror below). + Flushes all pending output if necessary, closes the compressed file and + deallocates the (de)compression state. Note that once file is closed, you + cannot call gzerror with file, since its structures have been deallocated. + gzclose must not be called more than once on the same file, just as free + must not be called more than once on the same allocation. + + gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a + file operation error, or Z_OK on success. +*/ + +ZEXTERN int ZEXPORT gzclose_r OF((gzFile file)); +ZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); +/* + Same as gzclose(), but gzclose_r() is only for use when reading, and + gzclose_w() is only for use when writing or appending. The advantage to + using these instead of gzclose() is that they avoid linking in zlib + compression or decompression code that is not used when only reading or only + writing respectively. If gzclose() is used, then both compression and + decompression code will be included the application when linking to a static + zlib library. */ ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); /* - Returns the error message for the last error which occurred on the - given compressed file. errnum is set to zlib error number. If an - error occurred in the file system and not in the compression library, - errnum is set to Z_ERRNO and the application may consult errno - to get the exact error code. + Returns the error message for the last error which occurred on the given + compressed file. errnum is set to zlib error number. If an error occurred + in the file system and not in the compression library, errnum is set to + Z_ERRNO and the application may consult errno to get the exact error code. + + The application must not modify the returned string. Future calls to + this function may invalidate the previously returned string. If file is + closed, then the string previously returned by gzerror will no longer be + available. + + gzerror() should be used to distinguish errors from end-of-file for those + functions above that do not distinguish those cases in their return values. */ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); /* - Clears the error and end-of-file flags for file. This is analogous to the - clearerr() function in stdio. This is useful for continuing to read a gzip + Clears the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip file that is being written concurrently. */ + /* checksum functions */ /* These functions are not related to compression but are exported - anyway because they might be useful in applications using the - compression library. + anyway because they might be useful in applications using the compression + library. */ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); /* Update a running Adler-32 checksum with the bytes buf[0..len-1] and - return the updated checksum. If buf is NULL, this function returns - the required initial value for the checksum. - An Adler-32 checksum is almost as reliable as a CRC32 but can be computed - much faster. Usage example: + return the updated checksum. If buf is Z_NULL, this function returns the + required initial value for the checksum. + + An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + much faster. + + Usage example: uLong adler = adler32(0L, Z_NULL, 0); @@ -1273,9 +1485,10 @@ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); if (adler != original_adler) error(); */ +/* ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, z_off_t len2)); -/* + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of @@ -1285,9 +1498,11 @@ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); /* Update a running CRC-32 with the bytes buf[0..len-1] and return the - updated CRC-32. If buf is NULL, this function returns the required initial - value for the for the crc. Pre- and post-conditioning (one's complement) is - performed within this function so it shouldn't be done by the application. + updated CRC-32. If buf is Z_NULL, this function returns the required + initial value for the for the crc. Pre- and post-conditioning (one's + complement) is performed within this function so it shouldn't be done by the + application. + Usage example: uLong crc = crc32(0L, Z_NULL, 0); @@ -1298,9 +1513,9 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); if (crc != original_crc) error(); */ +/* ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); -/* Combine two CRC-32 check values into one. For two sequences of bytes, seq1 and seq2 with lengths len1 and len2, CRC-32 check values were calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 @@ -1339,16 +1554,57 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) #define inflateBackInit(strm, windowBits, window) \ inflateBackInit_((strm), (windowBits), (window), \ - ZLIB_VERSION, sizeof(z_stream)) + ZLIB_VERSION, sizeof(z_stream)) - -#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) - struct internal_state {int dummy;}; /* hack for buggy compilers */ +/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or + * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if + * both are true, the application gets the *64 functions, and the regular + * functions are changed to 64 bits) -- in case these are set on systems + * without large file support, _LFS64_LARGEFILE must also be true + */ +#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); + ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); #endif +#if !defined(ZLIB_INTERNAL) && _FILE_OFFSET_BITS-0 == 64 && _LFS64_LARGEFILE-0 +# define gzopen gzopen64 +# define gzseek gzseek64 +# define gztell gztell64 +# define gzoffset gzoffset64 +# define adler32_combine adler32_combine64 +# define crc32_combine crc32_combine64 +# ifdef _LARGEFILE64_SOURCE + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); + ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); +# endif +#else + ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); + ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int)); + ZEXTERN z_off_t ZEXPORT gztell OF((gzFile)); + ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); +#endif + +/* hack for buggy compilers */ +#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) + struct internal_state {int dummy;}; +#endif + +/* undocumented functions */ ZEXTERN const char * ZEXPORT zError OF((int)); -ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); +ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); #ifdef __cplusplus } diff --git a/extlib/zlib/zlib.lib b/extlib/zlib/zlib.lib index 307bd088a5b7ed4484d151503888ef1c69d0c785..4d1bd8018582970f4bfe2085e8a9d617c6b0a3a7 100644 GIT binary patch literal 117868 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 E0OHtC7XSbN literal 100642 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 #ifdef HAVE_SPACEWARE_INPUT -# include -# include +# include +# include # undef uint32_t // thanks but no thanks #endif