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