libpng (1.6.40)

(root)/
include/
libpng16/
pngconf.h
       1  
       2  /* pngconf.h - machine-configurable file for libpng
       3   *
       4   * libpng version 1.6.40
       5   *
       6   * Copyright (c) 2018-2022 Cosmin Truta
       7   * Copyright (c) 1998-2002,2004,2006-2016,2018 Glenn Randers-Pehrson
       8   * Copyright (c) 1996-1997 Andreas Dilger
       9   * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
      10   *
      11   * This code is released under the libpng license.
      12   * For conditions of distribution and use, see the disclaimer
      13   * and license in png.h
      14   *
      15   * Any machine specific code is near the front of this file, so if you
      16   * are configuring libpng for a machine, you may want to read the section
      17   * starting here down to where it starts to typedef png_color, png_text,
      18   * and png_info.
      19   */
      20  
      21  #ifndef PNGCONF_H
      22  #define PNGCONF_H
      23  
      24  #ifndef PNG_BUILDING_SYMBOL_TABLE /* else includes may cause problems */
      25  
      26  /* From libpng 1.6.0 libpng requires an ANSI X3.159-1989 ("ISOC90") compliant C
      27   * compiler for correct compilation.  The following header files are required by
      28   * the standard.  If your compiler doesn't provide these header files, or they
      29   * do not match the standard, you will need to provide/improve them.
      30   */
      31  #include <limits.h>
      32  #include <stddef.h>
      33  
      34  /* Library header files.  These header files are all defined by ISOC90; libpng
      35   * expects conformant implementations, however, an ISOC90 conformant system need
      36   * not provide these header files if the functionality cannot be implemented.
      37   * In this case it will be necessary to disable the relevant parts of libpng in
      38   * the build of pnglibconf.h.
      39   *
      40   * Prior to 1.6.0 string.h was included here; the API changes in 1.6.0 to not
      41   * include this unnecessary header file.
      42   */
      43  
      44  #ifdef PNG_STDIO_SUPPORTED
      45     /* Required for the definition of FILE: */
      46  #  include <stdio.h>
      47  #endif
      48  
      49  #ifdef PNG_SETJMP_SUPPORTED
      50     /* Required for the definition of jmp_buf and the declaration of longjmp: */
      51  #  include <setjmp.h>
      52  #endif
      53  
      54  #ifdef PNG_CONVERT_tIME_SUPPORTED
      55     /* Required for struct tm: */
      56  #  include <time.h>
      57  #endif
      58  
      59  #endif /* PNG_BUILDING_SYMBOL_TABLE */
      60  
      61  /* Prior to 1.6.0, it was possible to turn off 'const' in declarations,
      62   * using PNG_NO_CONST.  This is no longer supported.
      63   */
      64  #define PNG_CONST const /* backward compatibility only */
      65  
      66  /* This controls optimization of the reading of 16-bit and 32-bit
      67   * values from PNG files.  It can be set on a per-app-file basis: it
      68   * just changes whether a macro is used when the function is called.
      69   * The library builder sets the default; if read functions are not
      70   * built into the library the macro implementation is forced on.
      71   */
      72  #ifndef PNG_READ_INT_FUNCTIONS_SUPPORTED
      73  #  define PNG_USE_READ_MACROS
      74  #endif
      75  #if !defined(PNG_NO_USE_READ_MACROS) && !defined(PNG_USE_READ_MACROS)
      76  #  if PNG_DEFAULT_READ_MACROS
      77  #    define PNG_USE_READ_MACROS
      78  #  endif
      79  #endif
      80  
      81  /* COMPILER SPECIFIC OPTIONS.
      82   *
      83   * These options are provided so that a variety of difficult compilers
      84   * can be used.  Some are fixed at build time (e.g. PNG_API_RULE
      85   * below) but still have compiler specific implementations, others
      86   * may be changed on a per-file basis when compiling against libpng.
      87   */
      88  
      89  /* The PNGARG macro was used in versions of libpng prior to 1.6.0 to protect
      90   * against legacy (pre ISOC90) compilers that did not understand function
      91   * prototypes.  It is not required for modern C compilers.
      92   */
      93  #ifndef PNGARG
      94  #  define PNGARG(arglist) arglist
      95  #endif
      96  
      97  /* Function calling conventions.
      98   * =============================
      99   * Normally it is not necessary to specify to the compiler how to call
     100   * a function - it just does it - however on x86 systems derived from
     101   * Microsoft and Borland C compilers ('IBM PC', 'DOS', 'Windows' systems
     102   * and some others) there are multiple ways to call a function and the
     103   * default can be changed on the compiler command line.  For this reason
     104   * libpng specifies the calling convention of every exported function and
     105   * every function called via a user supplied function pointer.  This is
     106   * done in this file by defining the following macros:
     107   *
     108   * PNGAPI    Calling convention for exported functions.
     109   * PNGCBAPI  Calling convention for user provided (callback) functions.
     110   * PNGCAPI   Calling convention used by the ANSI-C library (required
     111   *           for longjmp callbacks and sometimes used internally to
     112   *           specify the calling convention for zlib).
     113   *
     114   * These macros should never be overridden.  If it is necessary to
     115   * change calling convention in a private build this can be done
     116   * by setting PNG_API_RULE (which defaults to 0) to one of the values
     117   * below to select the correct 'API' variants.
     118   *
     119   * PNG_API_RULE=0 Use PNGCAPI - the 'C' calling convention - throughout.
     120   *                This is correct in every known environment.
     121   * PNG_API_RULE=1 Use the operating system convention for PNGAPI and
     122   *                the 'C' calling convention (from PNGCAPI) for
     123   *                callbacks (PNGCBAPI).  This is no longer required
     124   *                in any known environment - if it has to be used
     125   *                please post an explanation of the problem to the
     126   *                libpng mailing list.
     127   *
     128   * These cases only differ if the operating system does not use the C
     129   * calling convention, at present this just means the above cases
     130   * (x86 DOS/Windows systems) and, even then, this does not apply to
     131   * Cygwin running on those systems.
     132   *
     133   * Note that the value must be defined in pnglibconf.h so that what
     134   * the application uses to call the library matches the conventions
     135   * set when building the library.
     136   */
     137  
     138  /* Symbol export
     139   * =============
     140   * When building a shared library it is almost always necessary to tell
     141   * the compiler which symbols to export.  The png.h macro 'PNG_EXPORT'
     142   * is used to mark the symbols.  On some systems these symbols can be
     143   * extracted at link time and need no special processing by the compiler,
     144   * on other systems the symbols are flagged by the compiler and just
     145   * the declaration requires a special tag applied (unfortunately) in a
     146   * compiler dependent way.  Some systems can do either.
     147   *
     148   * A small number of older systems also require a symbol from a DLL to
     149   * be flagged to the program that calls it.  This is a problem because
     150   * we do not know in the header file included by application code that
     151   * the symbol will come from a shared library, as opposed to a statically
     152   * linked one.  For this reason the application must tell us by setting
     153   * the magic flag PNG_USE_DLL to turn on the special processing before
     154   * it includes png.h.
     155   *
     156   * Four additional macros are used to make this happen:
     157   *
     158   * PNG_IMPEXP The magic (if any) to cause a symbol to be exported from
     159   *            the build or imported if PNG_USE_DLL is set - compiler
     160   *            and system specific.
     161   *
     162   * PNG_EXPORT_TYPE(type) A macro that pre or appends PNG_IMPEXP to
     163   *                       'type', compiler specific.
     164   *
     165   * PNG_DLL_EXPORT Set to the magic to use during a libpng build to
     166   *                make a symbol exported from the DLL.  Not used in the
     167   *                public header files; see pngpriv.h for how it is used
     168   *                in the libpng build.
     169   *
     170   * PNG_DLL_IMPORT Set to the magic to force the libpng symbols to come
     171   *                from a DLL - used to define PNG_IMPEXP when
     172   *                PNG_USE_DLL is set.
     173   */
     174  
     175  /* System specific discovery.
     176   * ==========================
     177   * This code is used at build time to find PNG_IMPEXP, the API settings
     178   * and PNG_EXPORT_TYPE(), it may also set a macro to indicate the DLL
     179   * import processing is possible.  On Windows systems it also sets
     180   * compiler-specific macros to the values required to change the calling
     181   * conventions of the various functions.
     182   */
     183  #if defined(_WIN32) || defined(__WIN32__) || defined(__NT__) || \
     184      defined(__CYGWIN__)
     185    /* Windows system (DOS doesn't support DLLs).  Includes builds under Cygwin or
     186     * MinGW on any architecture currently supported by Windows.  Also includes
     187     * Watcom builds but these need special treatment because they are not
     188     * compatible with GCC or Visual C because of different calling conventions.
     189     */
     190  #  if PNG_API_RULE == 2
     191     /* If this line results in an error, either because __watcall is not
     192      * understood or because of a redefine just below you cannot use *this*
     193      * build of the library with the compiler you are using.  *This* build was
     194      * build using Watcom and applications must also be built using Watcom!
     195      */
     196  #    define PNGCAPI __watcall
     197  #  endif
     198  
     199  #  if defined(__GNUC__) || (defined(_MSC_VER) && (_MSC_VER >= 800))
     200  #    define PNGCAPI __cdecl
     201  #    if PNG_API_RULE == 1
     202     /* If this line results in an error __stdcall is not understood and
     203      * PNG_API_RULE should not have been set to '1'.
     204      */
     205  #      define PNGAPI __stdcall
     206  #    endif
     207  #  else
     208     /* An older compiler, or one not detected (erroneously) above,
     209      * if necessary override on the command line to get the correct
     210      * variants for the compiler.
     211      */
     212  #    ifndef PNGCAPI
     213  #      define PNGCAPI _cdecl
     214  #    endif
     215  #    if PNG_API_RULE == 1 && !defined(PNGAPI)
     216  #      define PNGAPI _stdcall
     217  #    endif
     218  #  endif /* compiler/api */
     219  
     220    /* NOTE: PNGCBAPI always defaults to PNGCAPI. */
     221  
     222  #  if defined(PNGAPI) && !defined(PNG_USER_PRIVATEBUILD)
     223  #     error "PNG_USER_PRIVATEBUILD must be defined if PNGAPI is changed"
     224  #  endif
     225  
     226  #  if (defined(_MSC_VER) && _MSC_VER < 800) ||\
     227        (defined(__BORLANDC__) && __BORLANDC__ < 0x500)
     228     /* older Borland and MSC
     229      * compilers used '__export' and required this to be after
     230      * the type.
     231      */
     232  #    ifndef PNG_EXPORT_TYPE
     233  #      define PNG_EXPORT_TYPE(type) type PNG_IMPEXP
     234  #    endif
     235  #    define PNG_DLL_EXPORT __export
     236  #  else /* newer compiler */
     237  #    define PNG_DLL_EXPORT __declspec(dllexport)
     238  #    ifndef PNG_DLL_IMPORT
     239  #      define PNG_DLL_IMPORT __declspec(dllimport)
     240  #    endif
     241  #  endif /* compiler */
     242  
     243  #else /* !Windows */
     244  #  if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__)
     245  #    define PNGAPI _System
     246  #  else /* !Windows/x86 && !OS/2 */
     247     /* Use the defaults, or define PNG*API on the command line (but
     248      * this will have to be done for every compile!)
     249      */
     250  #  endif /* other system, !OS/2 */
     251  #endif /* !Windows/x86 */
     252  
     253  /* Now do all the defaulting . */
     254  #ifndef PNGCAPI
     255  #  define PNGCAPI
     256  #endif
     257  #ifndef PNGCBAPI
     258  #  define PNGCBAPI PNGCAPI
     259  #endif
     260  #ifndef PNGAPI
     261  #  define PNGAPI PNGCAPI
     262  #endif
     263  
     264  /* PNG_IMPEXP may be set on the compilation system command line or (if not set)
     265   * then in an internal header file when building the library, otherwise (when
     266   * using the library) it is set here.
     267   */
     268  #ifndef PNG_IMPEXP
     269  #  if defined(PNG_USE_DLL) && defined(PNG_DLL_IMPORT)
     270     /* This forces use of a DLL, disallowing static linking */
     271  #    define PNG_IMPEXP PNG_DLL_IMPORT
     272  #  endif
     273  
     274  #  ifndef PNG_IMPEXP
     275  #    define PNG_IMPEXP
     276  #  endif
     277  #endif
     278  
     279  /* In 1.5.2 the definition of PNG_FUNCTION has been changed to always treat
     280   * 'attributes' as a storage class - the attributes go at the start of the
     281   * function definition, and attributes are always appended regardless of the
     282   * compiler.  This considerably simplifies these macros but may cause problems
     283   * if any compilers both need function attributes and fail to handle them as
     284   * a storage class (this is unlikely.)
     285   */
     286  #ifndef PNG_FUNCTION
     287  #  define PNG_FUNCTION(type, name, args, attributes) attributes type name args
     288  #endif
     289  
     290  #ifndef PNG_EXPORT_TYPE
     291  #  define PNG_EXPORT_TYPE(type) PNG_IMPEXP type
     292  #endif
     293  
     294     /* The ordinal value is only relevant when preprocessing png.h for symbol
     295      * table entries, so we discard it here.  See the .dfn files in the
     296      * scripts directory.
     297      */
     298  
     299  #ifndef PNG_EXPORTA
     300  #  define PNG_EXPORTA(ordinal, type, name, args, attributes) \
     301        PNG_FUNCTION(PNG_EXPORT_TYPE(type), (PNGAPI name), PNGARG(args), \
     302        PNG_LINKAGE_API attributes)
     303  #endif
     304  
     305  /* ANSI-C (C90) does not permit a macro to be invoked with an empty argument,
     306   * so make something non-empty to satisfy the requirement:
     307   */
     308  #define PNG_EMPTY /*empty list*/
     309  
     310  #define PNG_EXPORT(ordinal, type, name, args) \
     311     PNG_EXPORTA(ordinal, type, name, args, PNG_EMPTY)
     312  
     313  /* Use PNG_REMOVED to comment out a removed interface. */
     314  #ifndef PNG_REMOVED
     315  #  define PNG_REMOVED(ordinal, type, name, args, attributes)
     316  #endif
     317  
     318  #ifndef PNG_CALLBACK
     319  #  define PNG_CALLBACK(type, name, args) type (PNGCBAPI name) PNGARG(args)
     320  #endif
     321  
     322  /* Support for compiler specific function attributes.  These are used
     323   * so that where compiler support is available incorrect use of API
     324   * functions in png.h will generate compiler warnings.
     325   *
     326   * Added at libpng-1.2.41.
     327   */
     328  
     329  #ifndef PNG_NO_PEDANTIC_WARNINGS
     330  #  ifndef PNG_PEDANTIC_WARNINGS_SUPPORTED
     331  #    define PNG_PEDANTIC_WARNINGS_SUPPORTED
     332  #  endif
     333  #endif
     334  
     335  #ifdef PNG_PEDANTIC_WARNINGS_SUPPORTED
     336    /* Support for compiler specific function attributes.  These are used
     337     * so that where compiler support is available, incorrect use of API
     338     * functions in png.h will generate compiler warnings.  Added at libpng
     339     * version 1.2.41.  Disabling these removes the warnings but may also produce
     340     * less efficient code.
     341     */
     342  #  if defined(__clang__) && defined(__has_attribute)
     343     /* Clang defines both __clang__ and __GNUC__. Check __clang__ first. */
     344  #    if !defined(PNG_USE_RESULT) && __has_attribute(__warn_unused_result__)
     345  #      define PNG_USE_RESULT __attribute__((__warn_unused_result__))
     346  #    endif
     347  #    if !defined(PNG_NORETURN) && __has_attribute(__noreturn__)
     348  #      define PNG_NORETURN __attribute__((__noreturn__))
     349  #    endif
     350  #    if !defined(PNG_ALLOCATED) && __has_attribute(__malloc__)
     351  #      define PNG_ALLOCATED __attribute__((__malloc__))
     352  #    endif
     353  #    if !defined(PNG_DEPRECATED) && __has_attribute(__deprecated__)
     354  #      define PNG_DEPRECATED __attribute__((__deprecated__))
     355  #    endif
     356  #    if !defined(PNG_PRIVATE)
     357  #      ifdef __has_extension
     358  #        if __has_extension(attribute_unavailable_with_message)
     359  #          define PNG_PRIVATE __attribute__((__unavailable__(\
     360               "This function is not exported by libpng.")))
     361  #        endif
     362  #      endif
     363  #    endif
     364  #    ifndef PNG_RESTRICT
     365  #      define PNG_RESTRICT __restrict
     366  #    endif
     367  
     368  #  elif defined(__GNUC__)
     369  #    ifndef PNG_USE_RESULT
     370  #      define PNG_USE_RESULT __attribute__((__warn_unused_result__))
     371  #    endif
     372  #    ifndef PNG_NORETURN
     373  #      define PNG_NORETURN   __attribute__((__noreturn__))
     374  #    endif
     375  #    if __GNUC__ >= 3
     376  #      ifndef PNG_ALLOCATED
     377  #        define PNG_ALLOCATED  __attribute__((__malloc__))
     378  #      endif
     379  #      ifndef PNG_DEPRECATED
     380  #        define PNG_DEPRECATED __attribute__((__deprecated__))
     381  #      endif
     382  #      ifndef PNG_PRIVATE
     383  #        if 0 /* Doesn't work so we use deprecated instead*/
     384  #          define PNG_PRIVATE \
     385              __attribute__((warning("This function is not exported by libpng.")))
     386  #        else
     387  #          define PNG_PRIVATE \
     388              __attribute__((__deprecated__))
     389  #        endif
     390  #      endif
     391  #      if ((__GNUC__ > 3) || !defined(__GNUC_MINOR__) || (__GNUC_MINOR__ >= 1))
     392  #        ifndef PNG_RESTRICT
     393  #          define PNG_RESTRICT __restrict
     394  #        endif
     395  #      endif /* __GNUC__.__GNUC_MINOR__ > 3.0 */
     396  #    endif /* __GNUC__ >= 3 */
     397  
     398  #  elif defined(_MSC_VER)  && (_MSC_VER >= 1300)
     399  #    ifndef PNG_USE_RESULT
     400  #      define PNG_USE_RESULT /* not supported */
     401  #    endif
     402  #    ifndef PNG_NORETURN
     403  #      define PNG_NORETURN   __declspec(noreturn)
     404  #    endif
     405  #    ifndef PNG_ALLOCATED
     406  #      if (_MSC_VER >= 1400)
     407  #        define PNG_ALLOCATED __declspec(restrict)
     408  #      endif
     409  #    endif
     410  #    ifndef PNG_DEPRECATED
     411  #      define PNG_DEPRECATED __declspec(deprecated)
     412  #    endif
     413  #    ifndef PNG_PRIVATE
     414  #      define PNG_PRIVATE __declspec(deprecated)
     415  #    endif
     416  #    ifndef PNG_RESTRICT
     417  #      if (_MSC_VER >= 1400)
     418  #        define PNG_RESTRICT __restrict
     419  #      endif
     420  #    endif
     421  
     422  #  elif defined(__WATCOMC__)
     423  #    ifndef PNG_RESTRICT
     424  #      define PNG_RESTRICT __restrict
     425  #    endif
     426  #  endif
     427  #endif /* PNG_PEDANTIC_WARNINGS */
     428  
     429  #ifndef PNG_DEPRECATED
     430  #  define PNG_DEPRECATED  /* Use of this function is deprecated */
     431  #endif
     432  #ifndef PNG_USE_RESULT
     433  #  define PNG_USE_RESULT  /* The result of this function must be checked */
     434  #endif
     435  #ifndef PNG_NORETURN
     436  #  define PNG_NORETURN    /* This function does not return */
     437  #endif
     438  #ifndef PNG_ALLOCATED
     439  #  define PNG_ALLOCATED   /* The result of the function is new memory */
     440  #endif
     441  #ifndef PNG_PRIVATE
     442  #  define PNG_PRIVATE     /* This is a private libpng function */
     443  #endif
     444  #ifndef PNG_RESTRICT
     445  #  define PNG_RESTRICT    /* The C99 "restrict" feature */
     446  #endif
     447  
     448  #ifndef PNG_FP_EXPORT     /* A floating point API. */
     449  #  ifdef PNG_FLOATING_POINT_SUPPORTED
     450  #     define PNG_FP_EXPORT(ordinal, type, name, args)\
     451           PNG_EXPORT(ordinal, type, name, args);
     452  #  else                   /* No floating point APIs */
     453  #     define PNG_FP_EXPORT(ordinal, type, name, args)
     454  #  endif
     455  #endif
     456  #ifndef PNG_FIXED_EXPORT  /* A fixed point API. */
     457  #  ifdef PNG_FIXED_POINT_SUPPORTED
     458  #     define PNG_FIXED_EXPORT(ordinal, type, name, args)\
     459           PNG_EXPORT(ordinal, type, name, args);
     460  #  else                   /* No fixed point APIs */
     461  #     define PNG_FIXED_EXPORT(ordinal, type, name, args)
     462  #  endif
     463  #endif
     464  
     465  #ifndef PNG_BUILDING_SYMBOL_TABLE
     466  /* Some typedefs to get us started.  These should be safe on most of the common
     467   * platforms.
     468   *
     469   * png_uint_32 and png_int_32 may, currently, be larger than required to hold a
     470   * 32-bit value however this is not normally advisable.
     471   *
     472   * png_uint_16 and png_int_16 should always be two bytes in size - this is
     473   * verified at library build time.
     474   *
     475   * png_byte must always be one byte in size.
     476   *
     477   * The checks below use constants from limits.h, as defined by the ISOC90
     478   * standard.
     479   */
     480  #if CHAR_BIT == 8 && UCHAR_MAX == 255
     481     typedef unsigned char png_byte;
     482  #else
     483  #  error "libpng requires 8-bit bytes"
     484  #endif
     485  
     486  #if INT_MIN == -32768 && INT_MAX == 32767
     487     typedef int png_int_16;
     488  #elif SHRT_MIN == -32768 && SHRT_MAX == 32767
     489     typedef short png_int_16;
     490  #else
     491  #  error "libpng requires a signed 16-bit type"
     492  #endif
     493  
     494  #if UINT_MAX == 65535
     495     typedef unsigned int png_uint_16;
     496  #elif USHRT_MAX == 65535
     497     typedef unsigned short png_uint_16;
     498  #else
     499  #  error "libpng requires an unsigned 16-bit type"
     500  #endif
     501  
     502  #if INT_MIN < -2147483646 && INT_MAX > 2147483646
     503     typedef int png_int_32;
     504  #elif LONG_MIN < -2147483646 && LONG_MAX > 2147483646
     505     typedef long int png_int_32;
     506  #else
     507  #  error "libpng requires a signed 32-bit (or more) type"
     508  #endif
     509  
     510  #if UINT_MAX > 4294967294U
     511     typedef unsigned int png_uint_32;
     512  #elif ULONG_MAX > 4294967294U
     513     typedef unsigned long int png_uint_32;
     514  #else
     515  #  error "libpng requires an unsigned 32-bit (or more) type"
     516  #endif
     517  
     518  /* Prior to 1.6.0, it was possible to disable the use of size_t and ptrdiff_t.
     519   * From 1.6.0 onwards, an ISO C90 compiler, as well as a standard-compliant
     520   * behavior of sizeof and ptrdiff_t are required.
     521   * The legacy typedefs are provided here for backwards compatibility.
     522   */
     523  typedef size_t png_size_t;
     524  typedef ptrdiff_t png_ptrdiff_t;
     525  
     526  /* libpng needs to know the maximum value of 'size_t' and this controls the
     527   * definition of png_alloc_size_t, below.  This maximum value of size_t limits
     528   * but does not control the maximum allocations the library makes - there is
     529   * direct application control of this through png_set_user_limits().
     530   */
     531  #ifndef PNG_SMALL_SIZE_T
     532     /* Compiler specific tests for systems where size_t is known to be less than
     533      * 32 bits (some of these systems may no longer work because of the lack of
     534      * 'far' support; see above.)
     535      */
     536  #  if (defined(__TURBOC__) && !defined(__FLAT__)) ||\
     537     (defined(_MSC_VER) && defined(MAXSEG_64K))
     538  #     define PNG_SMALL_SIZE_T
     539  #  endif
     540  #endif
     541  
     542  /* png_alloc_size_t is guaranteed to be no smaller than size_t, and no smaller
     543   * than png_uint_32.  Casts from size_t or png_uint_32 to png_alloc_size_t are
     544   * not necessary; in fact, it is recommended not to use them at all, so that
     545   * the compiler can complain when something turns out to be problematic.
     546   *
     547   * Casts in the other direction (from png_alloc_size_t to size_t or
     548   * png_uint_32) should be explicitly applied; however, we do not expect to
     549   * encounter practical situations that require such conversions.
     550   *
     551   * PNG_SMALL_SIZE_T must be defined if the maximum value of size_t is less than
     552   * 4294967295 - i.e. less than the maximum value of png_uint_32.
     553   */
     554  #ifdef PNG_SMALL_SIZE_T
     555     typedef png_uint_32 png_alloc_size_t;
     556  #else
     557     typedef size_t png_alloc_size_t;
     558  #endif
     559  
     560  /* Prior to 1.6.0 libpng offered limited support for Microsoft C compiler
     561   * implementations of Intel CPU specific support of user-mode segmented address
     562   * spaces, where 16-bit pointers address more than 65536 bytes of memory using
     563   * separate 'segment' registers.  The implementation requires two different
     564   * types of pointer (only one of which includes the segment value.)
     565   *
     566   * If required this support is available in version 1.2 of libpng and may be
     567   * available in versions through 1.5, although the correctness of the code has
     568   * not been verified recently.
     569   */
     570  
     571  /* Typedef for floating-point numbers that are converted to fixed-point with a
     572   * multiple of 100,000, e.g., gamma
     573   */
     574  typedef png_int_32 png_fixed_point;
     575  
     576  /* Add typedefs for pointers */
     577  typedef void                  * png_voidp;
     578  typedef const void            * png_const_voidp;
     579  typedef png_byte              * png_bytep;
     580  typedef const png_byte        * png_const_bytep;
     581  typedef png_uint_32           * png_uint_32p;
     582  typedef const png_uint_32     * png_const_uint_32p;
     583  typedef png_int_32            * png_int_32p;
     584  typedef const png_int_32      * png_const_int_32p;
     585  typedef png_uint_16           * png_uint_16p;
     586  typedef const png_uint_16     * png_const_uint_16p;
     587  typedef png_int_16            * png_int_16p;
     588  typedef const png_int_16      * png_const_int_16p;
     589  typedef char                  * png_charp;
     590  typedef const char            * png_const_charp;
     591  typedef png_fixed_point       * png_fixed_point_p;
     592  typedef const png_fixed_point * png_const_fixed_point_p;
     593  typedef size_t                * png_size_tp;
     594  typedef const size_t          * png_const_size_tp;
     595  
     596  #ifdef PNG_STDIO_SUPPORTED
     597  typedef FILE            * png_FILE_p;
     598  #endif
     599  
     600  #ifdef PNG_FLOATING_POINT_SUPPORTED
     601  typedef double       * png_doublep;
     602  typedef const double * png_const_doublep;
     603  #endif
     604  
     605  /* Pointers to pointers; i.e. arrays */
     606  typedef png_byte        * * png_bytepp;
     607  typedef png_uint_32     * * png_uint_32pp;
     608  typedef png_int_32      * * png_int_32pp;
     609  typedef png_uint_16     * * png_uint_16pp;
     610  typedef png_int_16      * * png_int_16pp;
     611  typedef const char      * * png_const_charpp;
     612  typedef char            * * png_charpp;
     613  typedef png_fixed_point * * png_fixed_point_pp;
     614  #ifdef PNG_FLOATING_POINT_SUPPORTED
     615  typedef double          * * png_doublepp;
     616  #endif
     617  
     618  /* Pointers to pointers to pointers; i.e., pointer to array */
     619  typedef char            * * * png_charppp;
     620  
     621  #endif /* PNG_BUILDING_SYMBOL_TABLE */
     622  
     623  #endif /* PNGCONF_H */