100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes/* zutil.h -- internal interface and configuration of the compression library
204351a92ecc8429c999acbfc5dfe5aa8bee1d19dElliott Hughes * Copyright (C) 1995-2013 Jean-loup Gailly.
300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes * For conditions of distribution and use, see copyright notice in zlib.h
400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes */
500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes/* WARNING: this file should *not* be used by applications. It is
700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes   part of the implementation of the compression library and is
800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes   subject to change. Applications should only use zlib.h.
900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes */
1000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
1100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes/* @(#) $Id$ */
1200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
1300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#ifndef ZUTIL_H
1400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#define ZUTIL_H
1500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
1609eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes#ifdef HAVE_HIDDEN
1700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
1800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#else
1900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define ZLIB_INTERNAL
2000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
2100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
2200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#include "zlib.h"
2300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
2400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#if defined(STDC) && !defined(Z_SOLO)
2500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  if !(defined(_WIN32_WCE) && defined(_MSC_VER))
2600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    include <stddef.h>
2700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  endif
2800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  include <string.h>
2900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  include <stdlib.h>
3000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
3100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
3200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#ifdef Z_SOLO
3300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes   typedef long ptrdiff_t;  /* guess -- will be caught if guess is wrong */
3400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
3500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
3600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#ifndef local
3700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define local static
3800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
3900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes/* compile with -Dlocal if your debugger can't find static symbols */
4000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
4100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughestypedef unsigned char  uch;
4200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughestypedef uch FAR uchf;
4300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughestypedef unsigned short ush;
4400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughestypedef ush FAR ushf;
4500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughestypedef unsigned long  ulg;
4600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
4704351a92ecc8429c999acbfc5dfe5aa8bee1d19dElliott Hughesextern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
4800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes/* (size given to avoid silly warnings with Visual C++) */
4900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
5000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
5100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
5200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#define ERR_RETURN(strm,err) \
5304351a92ecc8429c999acbfc5dfe5aa8bee1d19dElliott Hughes  return (strm->msg = ERR_MSG(err), (err))
5400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes/* To be used only when the state is known to be valid */
5500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
5600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes        /* common constants */
5700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
5800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#ifndef DEF_WBITS
5900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define DEF_WBITS MAX_WBITS
6000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
6100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes/* default windowBits for decompression. MAX_WBITS is for compression only */
6200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
6300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#if MAX_MEM_LEVEL >= 8
6400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define DEF_MEM_LEVEL 8
6500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#else
6600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
6700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
6800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes/* default memLevel */
6900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
7000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#define STORED_BLOCK 0
7100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#define STATIC_TREES 1
7200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#define DYN_TREES    2
7300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes/* The three kinds of block type */
7400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
7500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#define MIN_MATCH  3
7600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#define MAX_MATCH  258
7700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes/* The minimum and maximum match lengths */
7800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
7900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
8000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
8100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes        /* target dependencies */
8200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
8300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
8400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define OS_CODE  0x00
8500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  ifndef Z_SOLO
8600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    if defined(__TURBOC__) || defined(__BORLANDC__)
8700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#      if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
8800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes         /* Allow compilation with ANSI keywords only enabled */
8900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes         void _Cdecl farfree( void *block );
9000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes         void *_Cdecl farmalloc( unsigned long nbytes );
9100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#      else
9200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#        include <alloc.h>
9300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#      endif
9400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    else /* MSC or DJGPP */
9500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#      include <malloc.h>
9600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    endif
9700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  endif
9800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
9900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
10000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#ifdef AMIGA
10100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define OS_CODE  0x01
10200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
10300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
10400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#if defined(VAXC) || defined(VMS)
10500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define OS_CODE  0x02
10600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define F_OPEN(name, mode) \
10700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes     fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
10800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
10900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
11000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#if defined(ATARI) || defined(atarist)
11100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define OS_CODE  0x05
11200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
11300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
11400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#ifdef OS2
11500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define OS_CODE  0x06
11600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  if defined(M_I86) && !defined(Z_SOLO)
11700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    include <malloc.h>
11800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  endif
11900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
12000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
12100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#if defined(MACOS) || defined(TARGET_OS_MAC)
12200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define OS_CODE  0x07
12300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  ifndef Z_SOLO
12400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
12500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#      include <unix.h> /* for fdopen */
12600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    else
12700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#      ifndef fdopen
12800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#        define fdopen(fd,mode) NULL /* No fdopen() */
12900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#      endif
13000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    endif
13100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  endif
13200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
13300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
13400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#ifdef TOPS20
13500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define OS_CODE  0x0a
13600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
13700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
13800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#ifdef WIN32
13900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  ifndef __CYGWIN__  /* Cygwin is Unix, not Win32 */
14000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    define OS_CODE  0x0b
14100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  endif
14200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
14300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
14400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#ifdef __50SERIES /* Prime/PRIMOS */
14500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define OS_CODE  0x0f
14600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
14700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
14800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#if defined(_BEOS_) || defined(RISCOS)
14900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define fdopen(fd,mode) NULL /* No fdopen() */
15000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
15100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
15200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
15300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  if defined(_WIN32_WCE)
15400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    define fdopen(fd,mode) NULL /* No fdopen() */
15500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    ifndef _PTRDIFF_T_DEFINED
15600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes       typedef int ptrdiff_t;
15700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#      define _PTRDIFF_T_DEFINED
15800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    endif
15900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  else
16000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    define fdopen(fd,type)  _fdopen(fd,type)
16100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  endif
16200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
16300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
16400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#if defined(__BORLANDC__) && !defined(MSDOS)
16500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes  #pragma warn -8004
16600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes  #pragma warn -8008
16700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes  #pragma warn -8066
16800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
16900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
17000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes/* provide prototypes for these when building zlib without LFS */
17104351a92ecc8429c999acbfc5dfe5aa8bee1d19dElliott Hughes#if !defined(_WIN32) && \
17204351a92ecc8429c999acbfc5dfe5aa8bee1d19dElliott Hughes    (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
17300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes    ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
17400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes    ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
17500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
17600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
17700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes        /* common defaults */
17800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
17900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#ifndef OS_CODE
18000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define OS_CODE  0x03  /* assume Unix */
18100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
18200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
18300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#ifndef F_OPEN
18400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define F_OPEN(name, mode) fopen((name), (mode))
18500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
18600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
18700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes         /* functions */
18800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
18900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#if defined(pyr) || defined(Z_SOLO)
19000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define NO_MEMCPY
19100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
19200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
19300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes /* Use our own functions for small and medium model with MSC <= 5.0.
19400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes  * You may have to use the same strategy for Borland C (untested).
19500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes  * The __SC__ check is for Symantec.
19600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes  */
19700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define NO_MEMCPY
19800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
19900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
20000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define HAVE_MEMCPY
20100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
20200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#ifdef HAVE_MEMCPY
20300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  ifdef SMALL_MEDIUM /* MSDOS small or medium model */
20400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    define zmemcpy _fmemcpy
20500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    define zmemcmp _fmemcmp
20600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    define zmemzero(dest, len) _fmemset(dest, 0, len)
20700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  else
20800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    define zmemcpy memcpy
20900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    define zmemcmp memcmp
21000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#    define zmemzero(dest, len) memset(dest, 0, len)
21100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  endif
21200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#else
21300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes   void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
21400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes   int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
21500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes   void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len));
21600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
21700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
21800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes/* Diagnostic functions */
21900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#ifdef DEBUG
22000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  include <stdio.h>
22100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes   extern int ZLIB_INTERNAL z_verbose;
22200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes   extern void ZLIB_INTERNAL z_error OF((char *m));
22300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define Assert(cond,msg) {if(!(cond)) z_error(msg);}
22400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define Trace(x) {if (z_verbose>=0) fprintf x ;}
22500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define Tracev(x) {if (z_verbose>0) fprintf x ;}
22600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define Tracevv(x) {if (z_verbose>1) fprintf x ;}
22700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
22800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
22900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#else
23000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define Assert(cond,msg)
23100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define Trace(x)
23200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define Tracev(x)
23300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define Tracevv(x)
23400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define Tracec(c,x)
23500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#  define Tracecv(c,x)
23600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
23700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
23800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#ifndef Z_SOLO
23900fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes   voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items,
24000fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes                                    unsigned size));
24100fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes   void ZLIB_INTERNAL zcfree  OF((voidpf opaque, voidpf ptr));
24200fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif
24300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
24400fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#define ZALLOC(strm, items, size) \
24500fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes           (*((strm)->zalloc))((strm)->opaque, (items), (size))
24600fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#define ZFREE(strm, addr)  (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
24700fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
24800fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes
24909eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes/* Reverse the bytes in a 32-bit value */
25009eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
25109eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes                    (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
25209eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes
25300fb66d0b1488e4ca655906f82b27eb2ccc3e309Elliott Hughes#endif /* ZUTIL_H */
254