LCOV - code coverage report
Current view: top level - modules/zlib/src - zutil.c (source / functions) Hit Total Coverage
Test: output.info Lines: 5 16 31.2 %
Date: 2017-07-14 16:53:18 Functions: 2 5 40.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* zutil.c -- target dependent utility functions for the compression library
       2             :  * Copyright (C) 1995-2017 Jean-loup Gailly
       3             :  * For conditions of distribution and use, see copyright notice in zlib.h
       4             :  */
       5             : 
       6             : /* @(#) $Id$ */
       7             : 
       8             : #include "zutil.h"
       9             : #ifndef Z_SOLO
      10             : #  include "gzguts.h"
      11             : #endif
      12             : 
      13             : z_const char * const z_errmsg[10] = {
      14             :     (z_const char *)"need dictionary",     /* Z_NEED_DICT       2  */
      15             :     (z_const char *)"stream end",          /* Z_STREAM_END      1  */
      16             :     (z_const char *)"",                    /* Z_OK              0  */
      17             :     (z_const char *)"file error",          /* Z_ERRNO         (-1) */
      18             :     (z_const char *)"stream error",        /* Z_STREAM_ERROR  (-2) */
      19             :     (z_const char *)"data error",          /* Z_DATA_ERROR    (-3) */
      20             :     (z_const char *)"insufficient memory", /* Z_MEM_ERROR     (-4) */
      21             :     (z_const char *)"buffer error",        /* Z_BUF_ERROR     (-5) */
      22             :     (z_const char *)"incompatible version",/* Z_VERSION_ERROR (-6) */
      23             :     (z_const char *)""
      24             : };
      25             : 
      26             : 
      27           0 : const char * ZEXPORT zlibVersion()
      28             : {
      29           0 :     return ZLIB_VERSION;
      30             : }
      31             : 
      32           0 : uLong ZEXPORT zlibCompileFlags()
      33             : {
      34             :     uLong flags;
      35             : 
      36           0 :     flags = 0;
      37             :     switch ((int)(sizeof(uInt))) {
      38             :     case 2:     break;
      39           0 :     case 4:     flags += 1;     break;
      40             :     case 8:     flags += 2;     break;
      41             :     default:    flags += 3;
      42             :     }
      43             :     switch ((int)(sizeof(uLong))) {
      44             :     case 2:     break;
      45             :     case 4:     flags += 1 << 2;        break;
      46           0 :     case 8:     flags += 2 << 2;        break;
      47             :     default:    flags += 3 << 2;
      48             :     }
      49             :     switch ((int)(sizeof(voidpf))) {
      50             :     case 2:     break;
      51             :     case 4:     flags += 1 << 4;        break;
      52           0 :     case 8:     flags += 2 << 4;        break;
      53             :     default:    flags += 3 << 4;
      54             :     }
      55             :     switch ((int)(sizeof(z_off_t))) {
      56             :     case 2:     break;
      57             :     case 4:     flags += 1 << 6;        break;
      58           0 :     case 8:     flags += 2 << 6;        break;
      59             :     default:    flags += 3 << 6;
      60             :     }
      61             : #ifdef ZLIB_DEBUG
      62             :     flags += 1 << 8;
      63             : #endif
      64             : #if defined(ASMV) || defined(ASMINF)
      65             :     flags += 1 << 9;
      66             : #endif
      67             : #ifdef ZLIB_WINAPI
      68             :     flags += 1 << 10;
      69             : #endif
      70             : #ifdef BUILDFIXED
      71             :     flags += 1 << 12;
      72             : #endif
      73             : #ifdef DYNAMIC_CRC_TABLE
      74             :     flags += 1 << 13;
      75             : #endif
      76             : #ifdef NO_GZCOMPRESS
      77             :     flags += 1L << 16;
      78             : #endif
      79             : #ifdef NO_GZIP
      80             :     flags += 1L << 17;
      81             : #endif
      82             : #ifdef PKZIP_BUG_WORKAROUND
      83             :     flags += 1L << 20;
      84             : #endif
      85             : #ifdef FASTEST
      86             :     flags += 1L << 21;
      87             : #endif
      88             : #if defined(STDC) || defined(Z_HAVE_STDARG_H)
      89             : #  ifdef NO_vsnprintf
      90             :     flags += 1L << 25;
      91             : #    ifdef HAS_vsprintf_void
      92             :     flags += 1L << 26;
      93             : #    endif
      94             : #  else
      95             : #    ifdef HAS_vsnprintf_void
      96             :     flags += 1L << 26;
      97             : #    endif
      98             : #  endif
      99             : #else
     100             :     flags += 1L << 24;
     101             : #  ifdef NO_snprintf
     102             :     flags += 1L << 25;
     103             : #    ifdef HAS_sprintf_void
     104             :     flags += 1L << 26;
     105             : #    endif
     106             : #  else
     107             : #    ifdef HAS_snprintf_void
     108             :     flags += 1L << 26;
     109             : #    endif
     110             : #  endif
     111             : #endif
     112           0 :     return flags;
     113             : }
     114             : 
     115             : #ifdef ZLIB_DEBUG
     116             : #include <stdlib.h>
     117             : #  ifndef verbose
     118             : #    define verbose 0
     119             : #  endif
     120             : int ZLIB_INTERNAL z_verbose = verbose;
     121             : 
     122             : void ZLIB_INTERNAL z_error (m)
     123             :     char *m;
     124             : {
     125             :     fprintf(stderr, "%s\n", m);
     126             :     exit(1);
     127             : }
     128             : #endif
     129             : 
     130             : /* exported to allow conversion of error code to string for compress() and
     131             :  * uncompress()
     132             :  */
     133           0 : const char * ZEXPORT zError(err)
     134             :     int err;
     135             : {
     136           0 :     return ERR_MSG(err);
     137             : }
     138             : 
     139             : #if defined(_WIN32_WCE)
     140             :     /* The Microsoft C Run-Time Library for Windows CE doesn't have
     141             :      * errno.  We define it as a global variable to simplify porting.
     142             :      * Its value is always 0 and should not be used.
     143             :      */
     144             :     int errno = 0;
     145             : #endif
     146             : 
     147             : #ifndef HAVE_MEMCPY
     148             : 
     149             : void ZLIB_INTERNAL zmemcpy(dest, source, len)
     150             :     Bytef* dest;
     151             :     const Bytef* source;
     152             :     uInt  len;
     153             : {
     154             :     if (len == 0) return;
     155             :     do {
     156             :         *dest++ = *source++; /* ??? to be unrolled */
     157             :     } while (--len != 0);
     158             : }
     159             : 
     160             : int ZLIB_INTERNAL zmemcmp(s1, s2, len)
     161             :     const Bytef* s1;
     162             :     const Bytef* s2;
     163             :     uInt  len;
     164             : {
     165             :     uInt j;
     166             : 
     167             :     for (j = 0; j < len; j++) {
     168             :         if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
     169             :     }
     170             :     return 0;
     171             : }
     172             : 
     173             : void ZLIB_INTERNAL zmemzero(dest, len)
     174             :     Bytef* dest;
     175             :     uInt  len;
     176             : {
     177             :     if (len == 0) return;
     178             :     do {
     179             :         *dest++ = 0;  /* ??? to be unrolled */
     180             :     } while (--len != 0);
     181             : }
     182             : #endif
     183             : 
     184             : #ifndef Z_SOLO
     185             : 
     186             : #ifdef SYS16BIT
     187             : 
     188             : #ifdef __TURBOC__
     189             : /* Turbo C in 16-bit mode */
     190             : 
     191             : #  define MY_ZCALLOC
     192             : 
     193             : /* Turbo C malloc() does not allow dynamic allocation of 64K bytes
     194             :  * and farmalloc(64K) returns a pointer with an offset of 8, so we
     195             :  * must fix the pointer. Warning: the pointer must be put back to its
     196             :  * original form in order to free it, use zcfree().
     197             :  */
     198             : 
     199             : #define MAX_PTR 10
     200             : /* 10*64K = 640K */
     201             : 
     202             : local int next_ptr = 0;
     203             : 
     204             : typedef struct ptr_table_s {
     205             :     voidpf org_ptr;
     206             :     voidpf new_ptr;
     207             : } ptr_table;
     208             : 
     209             : local ptr_table table[MAX_PTR];
     210             : /* This table is used to remember the original form of pointers
     211             :  * to large buffers (64K). Such pointers are normalized with a zero offset.
     212             :  * Since MSDOS is not a preemptive multitasking OS, this table is not
     213             :  * protected from concurrent access. This hack doesn't work anyway on
     214             :  * a protected system like OS/2. Use Microsoft C instead.
     215             :  */
     216             : 
     217             : voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
     218             : {
     219             :     voidpf buf;
     220             :     ulg bsize = (ulg)items*size;
     221             : 
     222             :     (void)opaque;
     223             : 
     224             :     /* If we allocate less than 65520 bytes, we assume that farmalloc
     225             :      * will return a usable pointer which doesn't have to be normalized.
     226             :      */
     227             :     if (bsize < 65520L) {
     228             :         buf = farmalloc(bsize);
     229             :         if (*(ush*)&buf != 0) return buf;
     230             :     } else {
     231             :         buf = farmalloc(bsize + 16L);
     232             :     }
     233             :     if (buf == NULL || next_ptr >= MAX_PTR) return NULL;
     234             :     table[next_ptr].org_ptr = buf;
     235             : 
     236             :     /* Normalize the pointer to seg:0 */
     237             :     *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4;
     238             :     *(ush*)&buf = 0;
     239             :     table[next_ptr++].new_ptr = buf;
     240             :     return buf;
     241             : }
     242             : 
     243             : void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
     244             : {
     245             :     int n;
     246             : 
     247             :     (void)opaque;
     248             : 
     249             :     if (*(ush*)&ptr != 0) { /* object < 64K */
     250             :         farfree(ptr);
     251             :         return;
     252             :     }
     253             :     /* Find the original pointer */
     254             :     for (n = 0; n < next_ptr; n++) {
     255             :         if (ptr != table[n].new_ptr) continue;
     256             : 
     257             :         farfree(table[n].org_ptr);
     258             :         while (++n < next_ptr) {
     259             :             table[n-1] = table[n];
     260             :         }
     261             :         next_ptr--;
     262             :         return;
     263             :     }
     264             :     Assert(0, "zcfree: ptr not found");
     265             : }
     266             : 
     267             : #endif /* __TURBOC__ */
     268             : 
     269             : 
     270             : #ifdef M_I86
     271             : /* Microsoft C in 16-bit mode */
     272             : 
     273             : #  define MY_ZCALLOC
     274             : 
     275             : #if (!defined(_MSC_VER) || (_MSC_VER <= 600))
     276             : #  define _halloc  halloc
     277             : #  define _hfree   hfree
     278             : #endif
     279             : 
     280             : voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)
     281             : {
     282             :     (void)opaque;
     283             :     return _halloc((long)items, size);
     284             : }
     285             : 
     286             : void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
     287             : {
     288             :     (void)opaque;
     289             :     _hfree(ptr);
     290             : }
     291             : 
     292             : #endif /* M_I86 */
     293             : 
     294             : #endif /* SYS16BIT */
     295             : 
     296             : 
     297             : #ifndef MY_ZCALLOC /* Any system without a special alloc function */
     298             : 
     299             : #ifndef STDC
     300             : extern voidp  malloc OF((uInt size));
     301             : extern voidp  calloc OF((uInt items, uInt size));
     302             : extern void   free   OF((voidpf ptr));
     303             : #endif
     304             : 
     305         632 : voidpf ZLIB_INTERNAL zcalloc (opaque, items, size)
     306             :     voidpf opaque;
     307             :     unsigned items;
     308             :     unsigned size;
     309             : {
     310             :     (void)opaque;
     311         632 :     return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
     312             :                               (voidpf)calloc(items, size);
     313             : }
     314             : 
     315         632 : void ZLIB_INTERNAL zcfree (opaque, ptr)
     316             :     voidpf opaque;
     317             :     voidpf ptr;
     318             : {
     319             :     (void)opaque;
     320         632 :     free(ptr);
     321         632 : }
     322             : 
     323             : #endif /* MY_ZCALLOC */
     324             : 
     325             : #endif /* !Z_SOLO */

Generated by: LCOV version 1.13