Geant4 Cross Reference |
1 /* gzguts.h -- zlib internal header definition 1 /* gzguts.h -- zlib internal header definitions for gz* operations 2 * Copyright (C) 2004-2019 Mark Adler << 2 * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler 3 * For conditions of distribution and use, see 3 * For conditions of distribution and use, see copyright notice in zlib.h 4 */ 4 */ 5 5 6 #ifdef _LARGEFILE64_SOURCE 6 #ifdef _LARGEFILE64_SOURCE 7 # ifndef _LARGEFILE_SOURCE 7 # ifndef _LARGEFILE_SOURCE 8 # define _LARGEFILE_SOURCE 1 8 # define _LARGEFILE_SOURCE 1 9 # endif 9 # endif 10 # ifdef _FILE_OFFSET_BITS 10 # ifdef _FILE_OFFSET_BITS 11 # undef _FILE_OFFSET_BITS 11 # undef _FILE_OFFSET_BITS 12 # endif 12 # endif 13 #endif 13 #endif 14 14 15 #ifdef HAVE_HIDDEN 15 #ifdef HAVE_HIDDEN 16 # define ZLIB_INTERNAL __attribute__((visibil 16 # define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) 17 #else 17 #else 18 # define ZLIB_INTERNAL 18 # define ZLIB_INTERNAL 19 #endif 19 #endif 20 20 21 #include <stdio.h> 21 #include <stdio.h> 22 #include "zlib.h" 22 #include "zlib.h" 23 #ifdef STDC 23 #ifdef STDC 24 # include <string.h> 24 # include <string.h> 25 # include <stdlib.h> 25 # include <stdlib.h> 26 # include <limits.h> 26 # include <limits.h> 27 #endif 27 #endif 28 28 29 #ifndef _POSIX_SOURCE 29 #ifndef _POSIX_SOURCE 30 # define _POSIX_SOURCE 30 # define _POSIX_SOURCE 31 #endif 31 #endif 32 #include <fcntl.h> 32 #include <fcntl.h> 33 33 34 #ifdef _WIN32 34 #ifdef _WIN32 35 # include <stddef.h> 35 # include <stddef.h> 36 #endif 36 #endif 37 37 38 #if defined(__TURBOC__) || defined(_MSC_VER) | 38 #if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32) 39 # include <io.h> 39 # include <io.h> 40 #endif 40 #endif 41 41 42 #if defined(_WIN32) << 42 #if defined(_WIN32) || defined(__CYGWIN__) 43 # define WIDECHAR 43 # define WIDECHAR 44 #endif 44 #endif 45 45 46 #ifdef WINAPI_FAMILY 46 #ifdef WINAPI_FAMILY 47 # define open _open 47 # define open _open 48 # define read _read 48 # define read _read 49 # define write _write 49 # define write _write 50 # define close _close 50 # define close _close 51 #endif 51 #endif 52 52 53 #ifdef NO_DEFLATE /* for compatibility w 53 #ifdef NO_DEFLATE /* for compatibility with old definition */ 54 # define NO_GZCOMPRESS 54 # define NO_GZCOMPRESS 55 #endif 55 #endif 56 56 57 #if defined(STDC99) || (defined(__TURBOC__) && 57 #if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550) 58 # ifndef HAVE_VSNPRINTF 58 # ifndef HAVE_VSNPRINTF 59 # define HAVE_VSNPRINTF 59 # define HAVE_VSNPRINTF 60 # endif 60 # endif 61 #endif 61 #endif 62 62 63 #if defined(__CYGWIN__) 63 #if defined(__CYGWIN__) 64 # ifndef HAVE_VSNPRINTF 64 # ifndef HAVE_VSNPRINTF 65 # define HAVE_VSNPRINTF 65 # define HAVE_VSNPRINTF 66 # endif 66 # endif 67 #endif 67 #endif 68 68 69 #if defined(MSDOS) && defined(__BORLANDC__) && 69 #if defined(MSDOS) && defined(__BORLANDC__) && (BORLANDC > 0x410) 70 # ifndef HAVE_VSNPRINTF 70 # ifndef HAVE_VSNPRINTF 71 # define HAVE_VSNPRINTF 71 # define HAVE_VSNPRINTF 72 # endif 72 # endif 73 #endif 73 #endif 74 74 75 #ifndef HAVE_VSNPRINTF 75 #ifndef HAVE_VSNPRINTF 76 # ifdef MSDOS 76 # ifdef MSDOS 77 /* vsnprintf may exist on some MS-DOS compiler 77 /* vsnprintf may exist on some MS-DOS compilers (DJGPP?), 78 but for now we just assume it doesn't. */ 78 but for now we just assume it doesn't. */ 79 # define NO_vsnprintf 79 # define NO_vsnprintf 80 # endif 80 # endif 81 # ifdef __TURBOC__ 81 # ifdef __TURBOC__ 82 # define NO_vsnprintf 82 # define NO_vsnprintf 83 # endif 83 # endif 84 # ifdef WIN32 84 # ifdef WIN32 85 /* In Win32, vsnprintf is available as the "no 85 /* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */ 86 # if !defined(vsnprintf) && !defined(NO_vsn 86 # if !defined(vsnprintf) && !defined(NO_vsnprintf) 87 # if !defined(_MSC_VER) || ( defined(_MSC 87 # if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 ) 88 # define vsnprintf _vsnprintf 88 # define vsnprintf _vsnprintf 89 # endif 89 # endif 90 # endif 90 # endif 91 # endif 91 # endif 92 # ifdef __SASC 92 # ifdef __SASC 93 # define NO_vsnprintf 93 # define NO_vsnprintf 94 # endif 94 # endif 95 # ifdef VMS 95 # ifdef VMS 96 # define NO_vsnprintf 96 # define NO_vsnprintf 97 # endif 97 # endif 98 # ifdef __OS400__ 98 # ifdef __OS400__ 99 # define NO_vsnprintf 99 # define NO_vsnprintf 100 # endif 100 # endif 101 # ifdef __MVS__ 101 # ifdef __MVS__ 102 # define NO_vsnprintf 102 # define NO_vsnprintf 103 # endif 103 # endif 104 #endif 104 #endif 105 105 106 /* unlike snprintf (which is required in C99), 106 /* unlike snprintf (which is required in C99), _snprintf does not guarantee 107 null termination of the result -- however t 107 null termination of the result -- however this is only used in gzlib.c where 108 the result is assured to fit in the space p 108 the result is assured to fit in the space provided */ 109 #if defined(_MSC_VER) && _MSC_VER < 1900 109 #if defined(_MSC_VER) && _MSC_VER < 1900 110 # define snprintf _snprintf 110 # define snprintf _snprintf 111 #endif 111 #endif 112 112 113 #ifndef local 113 #ifndef local 114 # define local static 114 # define local static 115 #endif 115 #endif 116 /* since "static" is used to mean two complete 116 /* since "static" is used to mean two completely different things in C, we 117 define "local" for the non-static meaning o 117 define "local" for the non-static meaning of "static", for readability 118 (compile with -Dlocal if your debugger can' 118 (compile with -Dlocal if your debugger can't find static symbols) */ 119 119 120 /* gz* functions always use library allocation 120 /* gz* functions always use library allocation functions */ 121 #ifndef STDC 121 #ifndef STDC 122 extern voidp malloc OF((uInt size)); 122 extern voidp malloc OF((uInt size)); 123 extern void free OF((voidpf ptr)); 123 extern void free OF((voidpf ptr)); 124 #endif 124 #endif 125 125 126 /* get errno and strerror definition */ 126 /* get errno and strerror definition */ 127 #if defined UNDER_CE 127 #if defined UNDER_CE 128 # include <windows.h> 128 # include <windows.h> 129 # define zstrerror() gz_strwinerror((DWORD)Ge 129 # define zstrerror() gz_strwinerror((DWORD)GetLastError()) 130 #else 130 #else 131 # ifndef NO_STRERROR 131 # ifndef NO_STRERROR 132 # include <errno.h> 132 # include <errno.h> 133 # define zstrerror() strerror(errno) 133 # define zstrerror() strerror(errno) 134 # else 134 # else 135 # define zstrerror() "stdio error (consult 135 # define zstrerror() "stdio error (consult errno)" 136 # endif 136 # endif 137 #endif 137 #endif 138 138 139 /* provide prototypes for these when building 139 /* provide prototypes for these when building zlib without LFS */ 140 #if !defined(_LARGEFILE64_SOURCE) || _LFS64_LA 140 #if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0 141 ZEXTERN gzFile ZEXPORT gzopen64 OF((const 141 ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); 142 ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzF 142 ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); 143 ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzF 143 ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); 144 ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((g 144 ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); 145 #endif 145 #endif 146 146 147 /* default memLevel */ 147 /* default memLevel */ 148 #if MAX_MEM_LEVEL >= 8 148 #if MAX_MEM_LEVEL >= 8 149 # define DEF_MEM_LEVEL 8 149 # define DEF_MEM_LEVEL 8 150 #else 150 #else 151 # define DEF_MEM_LEVEL MAX_MEM_LEVEL 151 # define DEF_MEM_LEVEL MAX_MEM_LEVEL 152 #endif 152 #endif 153 153 154 /* default i/o buffer size -- double this for 154 /* default i/o buffer size -- double this for output when reading (this and 155 twice this must be able to fit in an unsign 155 twice this must be able to fit in an unsigned type) */ 156 #define GZBUFSIZE 8192 156 #define GZBUFSIZE 8192 157 157 158 /* gzip modes, also provide a little integrity 158 /* gzip modes, also provide a little integrity check on the passed structure */ 159 #define GZ_NONE 0 159 #define GZ_NONE 0 160 #define GZ_READ 7247 160 #define GZ_READ 7247 161 #define GZ_WRITE 31153 161 #define GZ_WRITE 31153 162 #define GZ_APPEND 1 /* mode set to GZ_WRIT 162 #define GZ_APPEND 1 /* mode set to GZ_WRITE after the file is opened */ 163 163 164 /* values for gz_state how */ 164 /* values for gz_state how */ 165 #define LOOK 0 /* look for a gzip header 165 #define LOOK 0 /* look for a gzip header */ 166 #define COPY 1 /* copy input directly */ 166 #define COPY 1 /* copy input directly */ 167 #define GZIP 2 /* decompress a gzip strea 167 #define GZIP 2 /* decompress a gzip stream */ 168 168 169 /* internal gzip file state data structure */ 169 /* internal gzip file state data structure */ 170 typedef struct { 170 typedef struct { 171 /* exposed contents for gzgetc() macro 171 /* exposed contents for gzgetc() macro */ 172 struct gzFile_s x; /* "x" for exposed 172 struct gzFile_s x; /* "x" for exposed */ 173 /* x.have: number 173 /* x.have: number of bytes available at x.next */ 174 /* x.next: next ou 174 /* x.next: next output data to deliver or write */ 175 /* x.pos: current 175 /* x.pos: current position in uncompressed data */ 176 /* used for both reading and writing * 176 /* used for both reading and writing */ 177 int mode; /* see gzip modes 177 int mode; /* see gzip modes above */ 178 int fd; /* file descriptor 178 int fd; /* file descriptor */ 179 char *path; /* path or fd for 179 char *path; /* path or fd for error messages */ 180 unsigned size; /* buffer size, ze 180 unsigned size; /* buffer size, zero if not allocated yet */ 181 unsigned want; /* requested buffe 181 unsigned want; /* requested buffer size, default is GZBUFSIZE */ 182 unsigned char *in; /* input buffer (d 182 unsigned char *in; /* input buffer (double-sized when writing) */ 183 unsigned char *out; /* output buffer ( 183 unsigned char *out; /* output buffer (double-sized when reading) */ 184 int direct; /* 0 if processing 184 int direct; /* 0 if processing gzip, 1 if transparent */ 185 /* just for reading */ 185 /* just for reading */ 186 int how; /* 0: get header, 186 int how; /* 0: get header, 1: copy, 2: decompress */ 187 z_off64_t start; /* where the gzip 187 z_off64_t start; /* where the gzip data started, for rewinding */ 188 int eof; /* true if end of 188 int eof; /* true if end of input file reached */ 189 int past; /* true if read re 189 int past; /* true if read requested past end */ 190 /* just for writing */ 190 /* just for writing */ 191 int level; /* compression lev 191 int level; /* compression level */ 192 int strategy; /* compression str 192 int strategy; /* compression strategy */ 193 int reset; /* true if a reset << 194 /* seek request */ 193 /* seek request */ 195 z_off64_t skip; /* amount to skip 194 z_off64_t skip; /* amount to skip (already rewound if backwards) */ 196 int seek; /* true if seek re 195 int seek; /* true if seek request pending */ 197 /* error information */ 196 /* error information */ 198 int err; /* error code */ 197 int err; /* error code */ 199 char *msg; /* error message * 198 char *msg; /* error message */ 200 /* zlib inflate or deflate stream */ 199 /* zlib inflate or deflate stream */ 201 z_stream strm; /* stream structur 200 z_stream strm; /* stream structure in-place (not a pointer) */ 202 } gz_state; 201 } gz_state; 203 typedef gz_state FAR *gz_statep; 202 typedef gz_state FAR *gz_statep; 204 203 205 /* shared functions */ 204 /* shared functions */ 206 void ZLIB_INTERNAL gz_error OF((gz_statep, int 205 void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *)); 207 #if defined UNDER_CE 206 #if defined UNDER_CE 208 char ZLIB_INTERNAL *gz_strwinerror OF((DWORD e 207 char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error)); 209 #endif 208 #endif 210 209 211 /* GT_OFF(x), where x is an unsigned value, is 210 /* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t 212 value -- needed when comparing unsigned to 211 value -- needed when comparing unsigned to z_off64_t, which is signed 213 (possible z_off64_t types off_t, off64_t, a 212 (possible z_off64_t types off_t, off64_t, and long are all signed) */ 214 #ifdef INT_MAX 213 #ifdef INT_MAX 215 # define GT_OFF(x) (sizeof(int) == sizeof(z_o 214 # define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX) 216 #else 215 #else 217 unsigned ZLIB_INTERNAL gz_intmax OF((void)); 216 unsigned ZLIB_INTERNAL gz_intmax OF((void)); 218 # define GT_OFF(x) (sizeof(int) == sizeof(z_o 217 # define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) 219 #endif 218 #endif 220 219