Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Kitware
GitHub Repository: Kitware/CMake
Path: blob/master/Utilities/cmzlib/gzguts.h
3148 views
1
/* gzguts.h -- zlib internal header definitions for gz* operations
2
* Copyright (C) 2004-2024 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
# undef _FILE_OFFSET_BITS
11
# undef _TIME_BITS
12
#endif
13
14
#ifdef HAVE_HIDDEN
15
# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
16
#else
17
# define ZLIB_INTERNAL
18
#endif
19
20
#include <stdio.h>
21
#include "zlib.h"
22
#ifdef STDC
23
# include <string.h>
24
# include <stdlib.h>
25
# include <limits.h>
26
#endif
27
28
#ifndef _POSIX_SOURCE
29
# define _POSIX_SOURCE
30
#endif
31
#include <fcntl.h>
32
33
#ifdef _WIN32
34
# include <stddef.h>
35
#endif
36
37
#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32)
38
# include <io.h>
39
#endif
40
41
#if defined(_WIN32)
42
# define WIDECHAR
43
#endif
44
45
#ifdef WINAPI_FAMILY
46
# define open _open
47
# define read _read
48
# define write _write
49
# define close _close
50
#endif
51
52
#ifdef NO_DEFLATE /* for compatibility with old definition */
53
# define NO_GZCOMPRESS
54
#endif
55
56
#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
57
# ifndef HAVE_VSNPRINTF
58
# define HAVE_VSNPRINTF
59
# endif
60
#endif
61
62
#if defined(__CYGWIN__)
63
# ifndef HAVE_VSNPRINTF
64
# define HAVE_VSNPRINTF
65
# endif
66
#endif
67
68
#if defined(MSDOS) && defined(__BORLANDC__) && (BORLANDC > 0x410)
69
# ifndef HAVE_VSNPRINTF
70
# define HAVE_VSNPRINTF
71
# endif
72
#endif
73
74
#ifndef HAVE_VSNPRINTF
75
# ifdef MSDOS
76
/* vsnprintf may exist on some MS-DOS compilers (DJGPP?),
77
but for now we just assume it doesn't. */
78
# define NO_vsnprintf
79
# endif
80
# ifdef __TURBOC__
81
# define NO_vsnprintf
82
# endif
83
# ifdef WIN32
84
/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */
85
# if !defined(vsnprintf) && !defined(NO_vsnprintf)
86
# if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 )
87
# define vsnprintf _vsnprintf
88
# endif
89
# endif
90
# endif
91
# ifdef __SASC
92
# define NO_vsnprintf
93
# endif
94
# ifdef VMS
95
# define NO_vsnprintf
96
# endif
97
# ifdef __OS400__
98
# define NO_vsnprintf
99
# endif
100
# ifdef __MVS__
101
# define NO_vsnprintf
102
# endif
103
#endif
104
105
/* unlike snprintf (which is required in C99), _snprintf does not guarantee
106
null termination of the result -- however this is only used in gzlib.c where
107
the result is assured to fit in the space provided */
108
#if defined(_MSC_VER) && _MSC_VER < 1900
109
# define snprintf _snprintf
110
#endif
111
112
#ifndef local
113
# define local static
114
#endif
115
/* since "static" is used to mean two completely different things in C, we
116
define "local" for the non-static meaning of "static", for readability
117
(compile with -Dlocal if your debugger can't find static symbols) */
118
119
/* gz* functions always use library allocation functions */
120
#ifndef STDC
121
extern voidp malloc(uInt size);
122
extern void free(voidpf ptr);
123
#endif
124
125
/* get errno and strerror definition */
126
#if defined UNDER_CE
127
# include <windows.h>
128
# define zstrerror() gz_strwinerror((DWORD)GetLastError())
129
#else
130
# ifndef NO_STRERROR
131
# include <errno.h>
132
# define zstrerror() strerror(errno)
133
# else
134
# define zstrerror() "stdio error (consult errno)"
135
# endif
136
#endif
137
138
/* provide prototypes for these when building zlib without LFS */
139
#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0
140
ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *);
141
ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int);
142
ZEXTERN z_off64_t ZEXPORT gztell64(gzFile);
143
ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile);
144
#endif
145
146
/* default memLevel */
147
#if MAX_MEM_LEVEL >= 8
148
# define DEF_MEM_LEVEL 8
149
#else
150
# define DEF_MEM_LEVEL MAX_MEM_LEVEL
151
#endif
152
153
/* default i/o buffer size -- double this for output when reading (this and
154
twice this must be able to fit in an unsigned type) */
155
#define GZBUFSIZE 8192
156
157
/* gzip modes, also provide a little integrity check on the passed structure */
158
#define GZ_NONE 0
159
#define GZ_READ 7247
160
#define GZ_WRITE 31153
161
#define GZ_APPEND 1 /* mode set to GZ_WRITE after the file is opened */
162
163
/* values for gz_state how */
164
#define LOOK 0 /* look for a gzip header */
165
#define COPY 1 /* copy input directly */
166
#define GZIP 2 /* decompress a gzip stream */
167
168
/* internal gzip file state data structure */
169
typedef struct {
170
/* exposed contents for gzgetc() macro */
171
struct gzFile_s x; /* "x" for exposed */
172
/* x.have: number of bytes available at x.next */
173
/* x.next: next output data to deliver or write */
174
/* x.pos: current position in uncompressed data */
175
/* used for both reading and writing */
176
int mode; /* see gzip modes above */
177
int fd; /* file descriptor */
178
char *path; /* path or fd for error messages */
179
unsigned size; /* buffer size, zero if not allocated yet */
180
unsigned want; /* requested buffer size, default is GZBUFSIZE */
181
unsigned char *in; /* input buffer (double-sized when writing) */
182
unsigned char *out; /* output buffer (double-sized when reading) */
183
int direct; /* 0 if processing gzip, 1 if transparent */
184
/* just for reading */
185
int how; /* 0: get header, 1: copy, 2: decompress */
186
z_off64_t start; /* where the gzip data started, for rewinding */
187
int eof; /* true if end of input file reached */
188
int past; /* true if read requested past end */
189
/* just for writing */
190
int level; /* compression level */
191
int strategy; /* compression strategy */
192
int reset; /* true if a reset is pending after a Z_FINISH */
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(gz_statep, int, const char *);
206
#if defined UNDER_CE
207
char ZLIB_INTERNAL *gz_strwinerror(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
unsigned ZLIB_INTERNAL gz_intmax(void);
214
#define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax())
215
216