pngconf.h 21.7 KB
Newer Older
1

2
/* pngconf.h - machine configurable file for libpng
3
 *
4
 * libpng version 1.5.0beta55 - (PENDING RELEASE)
5
 *
6
 * Copyright (c) 1998-2010 Glenn Randers-Pehrson
7 8
 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
9
 *
10
 * This code is released under the libpng license.
11
 * For conditions of distribution and use, see the disclaimer
12
 * and license in png.h
13
 *
14
 */
G
Guy Schalnat 已提交
15 16

/* Any machine specific code is near the front of this file, so if you
17 18 19 20
 * are configuring libpng for a machine, you may want to read the section
 * starting here down to where it starts to typedef png_color, png_text,
 * and png_info.
 */
G
Guy Schalnat 已提交
21 22 23 24

#ifndef PNGCONF_H
#define PNGCONF_H

25 26 27
/* 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).
28
 */
29 30
#ifndef PNG_NO_LIMITS_H
#  include <limits.h>
31 32
#endif

G
[devel]  
Glenn Randers-Pehrson 已提交
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
/* 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 BSD
#  include <strings.h>
#else
#  include <string.h>
#endif

/* For png_FILE_p - this provides the standard definition of a
 * FILE
 */
#ifdef PNG_STDIO_SUPPORTED
#  include <stdio.h>
#endif

50 51 52
/* 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 to the function is called.
53 54
 * The library builder sets the default, if read functions are not
 * built into the library the macro implementation is forced on.
55
 */
56 57 58
#ifndef PNG_READ_INT_FUNCTIONS_SUPPORTED
#  define PNG_USE_READ_MACROS
#endif
59 60 61
#if !defined(PNG_NO_USE_READ_MACROS) && !defined(PNG_USE_READ_MACROS)
#  if PNG_DEFAULT_READ_MACROS
#    define PNG_USE_READ_MACROS
62
#  endif
63 64
#endif

65
/* COMPILER SPECIFIC OPTIONS.
66 67 68 69 70
 *
 * 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.
71
 */
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
/* This 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
 * need to drag the empty declaration out in front of here, or change the
 * ifdef to suit your own needs.
 */
#ifndef PNGARG

#  ifdef OF /* zlib prototype munger */
#    define PNGARG(arglist) OF(arglist)
#  else

#    ifdef _NO_PROTO
#      define PNGARG(arglist) ()
#    else
#      define PNGARG(arglist) arglist
#    endif /* _NO_PROTO */

#  endif /* OF */

#endif /* PNGARG */

/* 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
102 103 104
 * 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:
105 106 107 108 109 110 111
 *
 * 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).
 *
112 113 114 115
 * 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.
116
 *
117 118 119
 * 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
120
 *                the 'C' calling convention (from PNGCAPI) for
121 122 123 124
 *                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.
125 126 127 128 129
 *
 * 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.
130
 *
131
 * Note that the value must be defined in pnglibconf.h so that what
132 133
 * the application uses to call the library matches the conventions
 * set when building the library.
134
 */
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152

/* 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.
153
 *
154
 * Four additional macros are used to make this happen:
155 156 157 158 159 160 161
 *
 * 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.
162 163 164 165 166 167 168
 *
 * PNG_DLL_EXPORT Set to the magic to use during a libpng build to
 *                make a symbol exported from the DLL.
 *
 * 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.
169 170 171 172 173 174
 */

/* 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
175 176 177
 * 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.
178
 */
179 180 181 182
#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) )
G
[devel]  
Glenn Randers-Pehrson 已提交
183 184 185 186
  /* 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.
187
   */
G
[devel]  
Glenn Randers-Pehrson 已提交
188 189 190 191 192 193 194 195 196
#  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

197
#  if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800))
198
#    define PNGCAPI __cdecl
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
#    if PNG_API_RULE == 1
#      define PNGAPI __stdcall
#    endif
#  else
    /* 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. */
215

216 217
#  if defined(PNGAPI) && !defined(PNG_USER_PRIVATEBUILD)
   ERROR: PNG_USER_PRIVATEBUILD must be defined if PNGAPI is changed
218 219
#  endif

220 221 222 223 224
#  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.
225
     */
226 227 228 229 230 231 232 233 234 235
#    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 */
236

237 238 239 240 241 242 243 244 245
#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 */
246 247 248 249 250 251 252 253 254 255 256 257

/* Now do all the defaulting . */
#ifndef PNGCAPI
#  define PNGCAPI
#endif
#ifndef PNGCBAPI
#  define PNGCBAPI PNGCAPI
#endif
#ifndef PNGAPI
#  define PNGAPI PNGCAPI
#endif

258 259 260
/* The default for PNG_IMPEXP depends on whether the library is
 * being built or used.
 */
261
#ifndef PNG_IMPEXP
262 263 264
#  ifdef PNGLIB_BUILD
    /* Building the library */
#    if (defined(DLL_EXPORT)/*from libtool*/ ||\
265 266 267
        defined(_WINDLL) || defined(_DLL) || defined(__DLL__) ||\
        defined(_USRDLL) ||\
        defined(PNG_BUILD_DLL)) && defined(PNG_DLL_EXPORT)
268 269 270 271 272 273 274 275 276 277 278 279 280 281
      /* Building a DLL. */
#      define PNG_IMPEXP PNG_DLL_EXPORT
#    endif /* DLL */
#  else
    /* Using the library */
#    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
#  endif

#  ifndef PNG_IMPEXP
#    define PNG_IMPEXP
#  endif
282
#endif
283

284 285 286 287 288 289 290
/* THe following complexity is concerned with getting the 'attributes' of the
 * declared function in the correct place.  This potentially requires a separate
 * PNG_EXPORT function for every compiler.
 */
#ifndef PNG_FUNCTION
#  ifdef __GNUC__
#     define PNG_FUNCTION(type, name, args, attributes)\
291
         attributes type name args
292 293 294
#  else /* !GNUC */
#     ifdef _MSC_VER
#        define PNG_FUNCTION(type, name, args, attributes)\
295
         attributes type name args
296 297
#     else /* !MSC */
#        define PNG_FUNCTION(type, name, args, attributes)\
298
            type name args
299 300 301 302
#     endif
#  endif
#endif

303 304 305
#ifndef PNG_EXPORT_TYPE
#  define PNG_EXPORT_TYPE(type) PNG_IMPEXP type
#endif
306

307
#ifndef PNG_EXPORT
308 309 310
   /* The ordinal value is only relevant when preprocessing png.h for symbol
    * table entries.
    */
311
#  define PNG_EXPORT(type, name, args, attributes, ordinal)\
312 313
      extern PNG_FUNCTION(PNG_EXPORT_TYPE(type),(PNGAPI name),PNGARG(args),\
         attributes)
314 315 316 317
#endif

/* Use PNG_REMOVED to comment out a removed interface. */
#ifndef PNG_REMOVED
318
#  define PNG_REMOVED(type, name, args, attributes, ordinal)
319 320 321 322 323 324 325 326 327 328 329 330 331 332 333
#endif

#ifndef PNG_CALLBACK
#  define PNG_CALLBACK(type, name, args, attributes)\
   type (PNGCBAPI name) PNGARG(args) attributes
#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_NO_PEDANTIC_WARNINGS
334 335 336
#  ifndef PNG_PEDANTIC_WARNINGS_SUPPORTED
#    define PNG_PEDANTIC_WARNINGS_SUPPORTED
#  endif
337 338 339
#endif

#ifdef PNG_PEDANTIC_WARNINGS_SUPPORTED
340 341 342 343 344
  /* 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.
   */
345 346 347
#  ifdef __GNUC__
#    ifndef PNG_USE_RESULT
#      define PNG_USE_RESULT __attribute__((__warn_unused_result__))
348
#    endif
349 350 351
#    ifndef PNG_NORETURN
#      define PNG_NORETURN   __attribute__((__noreturn__))
#    endif
352 353 354
#    ifndef PNG_PTR_NORETURN
#      define PNG_PTR_NORETURN   __attribute__((__noreturn__))
#    endif
355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380
#    ifndef PNG_ALLOCATED
#      define PNG_ALLOCATED  __attribute__((__malloc__))
#    endif

    /* This specifically protects structure members that should only be
     * accessed from within the library, therefore should be empty during
     * a library build.
     */
#    ifndef PNGLIB_BUILD
#      ifndef PNG_DEPRECATED
#        define PNG_DEPRECATED __attribute__((__deprecated__))
#      endif
#      ifndef PNG_DEPSTRUCT
#        define PNG_DEPSTRUCT  __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 /* PNG_PRIVATE */
#    endif /* PNGLIB_BUILD */
#  endif /* __GNUC__ */
381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410
#  ifdef _MSC_VER /* may need to check value */
#    ifndef PNG_USE_RESULT
#      define PNG_USE_RESULT /*not supported*/
#    endif
#    ifndef PNG_NORETURN
#      define PNG_NORETURN   __declspec(noreturn)
#    endif
#    ifndef PNG_PTR_NORETURN
#      define PNG_PTR_NORETURN /*not supported*/
#    endif
#    ifndef PNG_ALLOCATED
#      define PNG_ALLOCATED __declspec(restrict)
#    endif

    /* This specifically protects structure members that should only be
     * accessed from within the library, therefore should be empty during
     * a library build.
     */
#    ifndef PNGLIB_BUILD
#      ifndef PNG_DEPRECATED
#        define PNG_DEPRECATED __declspec(deprecated)
#      endif
#      ifndef PNG_DEPSTRUCT
#        define PNG_DEPSTRUCT  __declspec(deprecated)
#      endif
#      ifndef PNG_PRIVATE
#        define PNG_PRIVATE __declspec(deprecated)
#      endif /* PNG_PRIVATE */
#    endif /* PNGLIB_BUILD */
#  endif /* __GNUC__ */
411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429
#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_DEPSTRUCT
#  define PNG_DEPSTRUCT   /* Access to this struct member is deprecated */
#endif
#ifndef PNG_PRIVATE
#  define PNG_PRIVATE     /* This is a private libpng function */
430
#endif
G
[devel]  
Glenn Randers-Pehrson 已提交
431 432
#ifndef PNG_FP_EXPORT     /* A floating point API. */
#  ifdef PNG_FLOATING_POINT_SUPPORTED
433 434
#     define PNG_FP_EXPORT(type, name, args, attributes, ordinal)\
         PNG_EXPORT(type, name, args, attributes, ordinal)
G
[devel]  
Glenn Randers-Pehrson 已提交
435
#  else                   /* No floating point APIs */
436
#     define PNG_FP_EXPORT(type, name, args, attributes, ordinal)
G
[devel]  
Glenn Randers-Pehrson 已提交
437 438 439 440
#  endif
#endif
#ifndef PNG_FIXED_EXPORT  /* A fixed point API. */
#  ifdef PNG_FIXED_POINT_SUPPORTED
441 442
#     define PNG_FIXED_EXPORT(type, name, args, attributes, ordinal)\
         PNG_EXPORT(type, name, args, attributes, ordinal)
G
[devel]  
Glenn Randers-Pehrson 已提交
443
#  else                   /* No fixed point APIs */
444
#     define PNG_FIXED_EXPORT(type, name, args, attributes, ordinal)
G
[devel]  
Glenn Randers-Pehrson 已提交
445 446
#  endif
#endif
447

A
Andreas Dilger 已提交
448
/* The following uses const char * instead of char * for error
449
 * and warning message functions, so some compilers won't complain.
450
 * If you do not want to use const, define PNG_NO_CONST here.
451 452 453
 *
 * This should not change how the APIs are called, so it can be done
 * on a per-file basis in the application.
454
 */
455 456 457 458 459 460
#ifndef PNG_CONST
#  ifndef PNG_NO_CONST
#    define PNG_CONST const
#  else
#    define PNG_CONST
#  endif
G
Guy Schalnat 已提交
461 462
#endif

A
Andreas Dilger 已提交
463
/* Some typedefs to get us started.  These should be safe on most of the
A
Andreas Dilger 已提交
464 465 466 467
 * common platforms.  The typedefs should be at least as large as the
 * 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
468
 * unsigned int for png_uint_16.
A
Andreas Dilger 已提交
469
 */
G
Guy Schalnat 已提交
470

471 472 473 474
#if defined(INT_MAX) && (INT_MAX > 0x7ffffffeL)
typedef unsigned int png_uint_32;
typedef int png_int_32;
#else
G
Guy Schalnat 已提交
475 476
typedef unsigned long png_uint_32;
typedef long png_int_32;
477
#endif
G
Guy Schalnat 已提交
478 479 480 481
typedef unsigned short png_uint_16;
typedef short png_int_16;
typedef unsigned char png_byte;

482
#ifdef PNG_NO_SIZE_T
483
typedef unsigned int png_size_t;
484
#else
485
typedef size_t png_size_t;
486
#endif
487
#define png_sizeof(x) (sizeof (x))
G
Guy Schalnat 已提交
488

A
Andreas Dilger 已提交
489
/* The following is needed for medium model support.  It cannot be in the
490
 * pngpriv.h header.  Needs modification for other compilers besides
A
Andreas Dilger 已提交
491 492 493 494 495 496
 * 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
 * have been made in zlib.  The USE_FAR_KEYWORD define triggers other
 * changes that are needed. (Tim Wegner)
 */
G
Guy Schalnat 已提交
497

A
Andreas Dilger 已提交
498
/* Separate compiler dependencies (problem here is that zlib.h always
499 500
 * defines FAR. (SJT)
 */
G
Guy Schalnat 已提交
501
#ifdef __BORLANDC__
502 503 504 505 506
#  if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__)
#    define LDATA 1
#  else
#    define LDATA 0
#  endif
507
  /* GRR:  why is Cygwin in here?  Cygwin is not Borland C... */
508
#  if !defined(__WIN32__) && !defined(__FLAT__) && !defined(__CYGWIN__)
509
#    define PNG_MAX_MALLOC_64K /* only used in build */
510 511 512 513 514 515
#    if (LDATA != 1)
#      ifndef FAR
#        define FAR __far
#      endif
#      define USE_FAR_KEYWORD
#    endif   /* LDATA != 1 */
516 517 518
         /* 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)
519
#        define FARDATA FAR
520
          */
521
#  endif  /* __WIN32__, __FLAT__, __CYGWIN__ */
G
Guy Schalnat 已提交
522
#endif   /* __BORLANDC__ */
G
Guy Schalnat 已提交
523 524


A
Andreas Dilger 已提交
525
/* Suggest testing for specific compiler first before testing for
526 527 528
 * FAR.  The Watcom compiler defines both __MEDIUM__ and M_I86MM,
 * making reliance oncertain keywords suspect. (SJT)
 */
G
Guy Schalnat 已提交
529 530

/* MSC Medium model */
531 532
#ifdef FAR
#  ifdef M_I86MM
533 534 535
#    define USE_FAR_KEYWORD
#    define FARDATA FAR
#    include <dos.h>
G
Guy Schalnat 已提交
536 537 538 539 540
#  endif
#endif

/* SJT: default case */
#ifndef FAR
541
#  define FAR
G
Guy Schalnat 已提交
542 543
#endif

A
Andreas Dilger 已提交
544
/* At this point FAR is always defined */
G
Guy Schalnat 已提交
545
#ifndef FARDATA
546
#  define FARDATA
G
Guy Schalnat 已提交
547 548
#endif

549
/* Typedef for floating-point numbers that are converted
G
[devel]  
Glenn Randers-Pehrson 已提交
550
 * to fixed-point with a multiple of 100,000, e.g., gamma
551
 */
552 553
typedef png_int_32 png_fixed_point;

A
Andreas Dilger 已提交
554
/* Add typedefs for pointers */
555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572
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;
573

574
#ifdef PNG_STDIO_SUPPORTED
575
typedef FILE            * png_FILE_p;
576 577
#endif

578
#ifdef PNG_FLOATING_POINT_SUPPORTED
579 580
typedef double           FAR * png_doublep;
typedef PNG_CONST double FAR * png_const_doublep;
581
#endif
G
Guy Schalnat 已提交
582

A
Andreas Dilger 已提交
583
/* Pointers to pointers; i.e. arrays */
G
Guy Schalnat 已提交
584 585 586 587 588 589 590
typedef png_byte        FAR * FAR * png_bytepp;
typedef png_uint_32     FAR * FAR * png_uint_32pp;
typedef png_int_32      FAR * FAR * png_int_32pp;
typedef png_uint_16     FAR * FAR * png_uint_16pp;
typedef png_int_16      FAR * FAR * png_int_16pp;
typedef PNG_CONST char  FAR * FAR * png_const_charpp;
typedef char            FAR * FAR * png_charpp;
591
typedef png_fixed_point FAR * FAR * png_fixed_point_pp;
592
#ifdef PNG_FLOATING_POINT_SUPPORTED
A
Andreas Dilger 已提交
593
typedef double          FAR * FAR * png_doublepp;
594
#endif
G
Guy Schalnat 已提交
595

596
/* Pointers to pointers to pointers; i.e., pointer to array */
A
Andreas Dilger 已提交
597
typedef char            FAR * FAR * FAR * png_charppp;
G
Guy Schalnat 已提交
598

599 600 601 602 603 604 605 606 607
/* 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.
 */
608
#if defined(__TURBOC__) && !defined(__FLAT__)
609
   typedef unsigned long png_alloc_size_t;
610 611
#else
#  if defined(_MSC_VER) && defined(MAXSEG_64K)
612 613
     typedef unsigned long    png_alloc_size_t;
#  else
614 615 616 617 618 619 620
     /* 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;
621
#    else
622
       typedef png_size_t    png_alloc_size_t;
623 624 625
#    endif
#  endif
#endif
G
Guy Schalnat 已提交
626 627

#endif /* PNGCONF_H */