annotate Modules/zlib/gzwrite.c @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 224aa49f22f1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1 /* gzwrite.c -- zlib functions for writing gzip files
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
2 * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
3 * For conditions of distribution and use, see copyright notice in zlib.h
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
4 */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
5
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
6 #include "gzguts.h"
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
7
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
8 /* Local functions */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
9 local int gz_init OF((gz_statep));
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
10 local int gz_comp OF((gz_statep, int));
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
11 local int gz_zero OF((gz_statep, z_off64_t));
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
12
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
13 /* Initialize state for writing a gzip file. Mark initialization by setting
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
14 state->size to non-zero. Return -1 on failure or 0 on success. */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
15 local int gz_init(state)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
16 gz_statep state;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
17 {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
18 int ret;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
19 z_streamp strm = &(state->strm);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
20
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
21 /* allocate input buffer */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
22 state->in = (unsigned char *)malloc(state->want);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
23 if (state->in == NULL) {
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
24 gz_error(state, Z_MEM_ERROR, "out of memory");
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
25 return -1;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
26 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
27
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
28 /* only need output buffer and deflate state if compressing */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
29 if (!state->direct) {
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
30 /* allocate output buffer */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
31 state->out = (unsigned char *)malloc(state->want);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
32 if (state->out == NULL) {
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
33 free(state->in);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
34 gz_error(state, Z_MEM_ERROR, "out of memory");
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
35 return -1;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
36 }
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
37
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
38 /* allocate deflate memory, set up for gzip compression */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
39 strm->zalloc = Z_NULL;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
40 strm->zfree = Z_NULL;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
41 strm->opaque = Z_NULL;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
42 ret = deflateInit2(strm, state->level, Z_DEFLATED,
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
43 MAX_WBITS + 16, DEF_MEM_LEVEL, state->strategy);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
44 if (ret != Z_OK) {
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
45 free(state->out);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
46 free(state->in);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
47 gz_error(state, Z_MEM_ERROR, "out of memory");
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
48 return -1;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
49 }
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
50 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
51
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
52 /* mark state as initialized */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
53 state->size = state->want;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
54
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
55 /* initialize write buffer if compressing */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
56 if (!state->direct) {
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
57 strm->avail_out = state->size;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
58 strm->next_out = state->out;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
59 state->x.next = strm->next_out;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
60 }
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
61 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
62 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
63
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
64 /* Compress whatever is at avail_in and next_in and write to the output file.
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
65 Return -1 if there is an error writing to the output file, otherwise 0.
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
66 flush is assumed to be a valid deflate() flush value. If flush is Z_FINISH,
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
67 then the deflate() state is reset to start a new gzip stream. If gz->direct
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
68 is true, then simply write to the output file without compressing, and
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
69 ignore flush. */
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
70 local int gz_comp(state, flush)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
71 gz_statep state;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
72 int flush;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
73 {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
74 int ret, got;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
75 unsigned have;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
76 z_streamp strm = &(state->strm);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
77
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
78 /* allocate memory if this is the first time through */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
79 if (state->size == 0 && gz_init(state) == -1)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
80 return -1;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
81
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
82 /* write directly if requested */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
83 if (state->direct) {
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
84 got = write(state->fd, strm->next_in, strm->avail_in);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
85 if (got < 0 || (unsigned)got != strm->avail_in) {
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
86 gz_error(state, Z_ERRNO, zstrerror());
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
87 return -1;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
88 }
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
89 strm->avail_in = 0;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
90 return 0;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
91 }
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
92
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
93 /* run deflate() on provided input until it produces no more output */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
94 ret = Z_OK;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
95 do {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
96 /* write out current buffer contents if full, or if flushing, but if
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
97 doing Z_FINISH then don't write until we get to Z_STREAM_END */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
98 if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
99 (flush != Z_FINISH || ret == Z_STREAM_END))) {
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
100 have = (unsigned)(strm->next_out - state->x.next);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
101 if (have && ((got = write(state->fd, state->x.next, have)) < 0 ||
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
102 (unsigned)got != have)) {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
103 gz_error(state, Z_ERRNO, zstrerror());
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
104 return -1;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
105 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
106 if (strm->avail_out == 0) {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
107 strm->avail_out = state->size;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
108 strm->next_out = state->out;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
109 }
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
110 state->x.next = strm->next_out;
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
111 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
112
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
113 /* compress */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
114 have = strm->avail_out;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
115 ret = deflate(strm, flush);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
116 if (ret == Z_STREAM_ERROR) {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
117 gz_error(state, Z_STREAM_ERROR,
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
118 "internal error: deflate stream corrupt");
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
119 return -1;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
120 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
121 have -= strm->avail_out;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
122 } while (have);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
123
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
124 /* if that completed a deflate stream, allow another to start */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
125 if (flush == Z_FINISH)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
126 deflateReset(strm);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
127
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
128 /* all done, no errors */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
129 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
130 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
131
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
132 /* Compress len zeros to output. Return -1 on error, 0 on success. */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
133 local int gz_zero(state, len)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
134 gz_statep state;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
135 z_off64_t len;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
136 {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
137 int first;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
138 unsigned n;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
139 z_streamp strm = &(state->strm);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
140
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
141 /* consume whatever's left in the input buffer */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
142 if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
143 return -1;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
144
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
145 /* compress len zeros (len guaranteed > 0) */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
146 first = 1;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
147 while (len) {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
148 n = GT_OFF(state->size) || (z_off64_t)state->size > len ?
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
149 (unsigned)len : state->size;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
150 if (first) {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
151 memset(state->in, 0, n);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
152 first = 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
153 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
154 strm->avail_in = n;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
155 strm->next_in = state->in;
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
156 state->x.pos += n;
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
157 if (gz_comp(state, Z_NO_FLUSH) == -1)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
158 return -1;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
159 len -= n;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
160 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
161 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
162 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
163
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
164 /* -- see zlib.h -- */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
165 int ZEXPORT gzwrite(file, buf, len)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
166 gzFile file;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
167 voidpc buf;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
168 unsigned len;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
169 {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
170 unsigned put = len;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
171 gz_statep state;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
172 z_streamp strm;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
173
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
174 /* get internal structure */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
175 if (file == NULL)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
176 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
177 state = (gz_statep)file;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
178 strm = &(state->strm);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
179
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
180 /* check that we're writing and that there's no error */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
181 if (state->mode != GZ_WRITE || state->err != Z_OK)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
182 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
183
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
184 /* since an int is returned, make sure len fits in one, otherwise return
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
185 with an error (this avoids the flaw in the interface) */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
186 if ((int)len < 0) {
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
187 gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
188 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
189 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
190
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
191 /* if len is zero, avoid unnecessary operations */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
192 if (len == 0)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
193 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
194
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
195 /* allocate memory if this is the first time through */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
196 if (state->size == 0 && gz_init(state) == -1)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
197 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
198
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
199 /* check for seek request */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
200 if (state->seek) {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
201 state->seek = 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
202 if (gz_zero(state, state->skip) == -1)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
203 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
204 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
205
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
206 /* for small len, copy to input buffer, otherwise compress directly */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
207 if (len < state->size) {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
208 /* copy to input buffer, compress when full */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
209 do {
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
210 unsigned have, copy;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
211
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
212 if (strm->avail_in == 0)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
213 strm->next_in = state->in;
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
214 have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
215 copy = state->size - have;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
216 if (copy > len)
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
217 copy = len;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
218 memcpy(state->in + have, buf, copy);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
219 strm->avail_in += copy;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
220 state->x.pos += copy;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
221 buf = (const char *)buf + copy;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
222 len -= copy;
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
223 if (len && gz_comp(state, Z_NO_FLUSH) == -1)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
224 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
225 } while (len);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
226 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
227 else {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
228 /* consume whatever's left in the input buffer */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
229 if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
230 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
231
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
232 /* directly compress user buffer to file */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
233 strm->avail_in = len;
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
234 strm->next_in = (z_const Bytef *)buf;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
235 state->x.pos += len;
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
236 if (gz_comp(state, Z_NO_FLUSH) == -1)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
237 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
238 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
239
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
240 /* input was all buffered or compressed (put will fit in int) */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
241 return (int)put;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
242 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
243
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
244 /* -- see zlib.h -- */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
245 int ZEXPORT gzputc(file, c)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
246 gzFile file;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
247 int c;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
248 {
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
249 unsigned have;
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
250 unsigned char buf[1];
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
251 gz_statep state;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
252 z_streamp strm;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
253
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
254 /* get internal structure */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
255 if (file == NULL)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
256 return -1;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
257 state = (gz_statep)file;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
258 strm = &(state->strm);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
259
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
260 /* check that we're writing and that there's no error */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
261 if (state->mode != GZ_WRITE || state->err != Z_OK)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
262 return -1;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
263
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
264 /* check for seek request */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
265 if (state->seek) {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
266 state->seek = 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
267 if (gz_zero(state, state->skip) == -1)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
268 return -1;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
269 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
270
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
271 /* try writing to input buffer for speed (state->size == 0 if buffer not
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
272 initialized) */
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
273 if (state->size) {
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
274 if (strm->avail_in == 0)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
275 strm->next_in = state->in;
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
276 have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
277 if (have < state->size) {
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
278 state->in[have] = c;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
279 strm->avail_in++;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
280 state->x.pos++;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
281 return c & 0xff;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
282 }
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
283 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
284
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
285 /* no room in buffer or not initialized, use gz_write() */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
286 buf[0] = c;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
287 if (gzwrite(file, buf, 1) != 1)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
288 return -1;
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
289 return c & 0xff;
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
290 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
291
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
292 /* -- see zlib.h -- */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
293 int ZEXPORT gzputs(file, str)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
294 gzFile file;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
295 const char *str;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
296 {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
297 int ret;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
298 unsigned len;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
299
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
300 /* write string */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
301 len = (unsigned)strlen(str);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
302 ret = gzwrite(file, str, len);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
303 return ret == 0 && len != 0 ? -1 : ret;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
304 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
305
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
306 #if defined(STDC) || defined(Z_HAVE_STDARG_H)
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
307 #include <stdarg.h>
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
308
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
309 /* -- see zlib.h -- */
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
310 int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va)
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
311 {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
312 int size, len;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
313 gz_statep state;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
314 z_streamp strm;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
315
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
316 /* get internal structure */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
317 if (file == NULL)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
318 return -1;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
319 state = (gz_statep)file;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
320 strm = &(state->strm);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
321
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
322 /* check that we're writing and that there's no error */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
323 if (state->mode != GZ_WRITE || state->err != Z_OK)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
324 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
325
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
326 /* make sure we have some buffer space */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
327 if (state->size == 0 && gz_init(state) == -1)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
328 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
329
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
330 /* check for seek request */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
331 if (state->seek) {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
332 state->seek = 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
333 if (gz_zero(state, state->skip) == -1)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
334 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
335 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
336
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
337 /* consume whatever's left in the input buffer */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
338 if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
339 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
340
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
341 /* do the printf() into the input buffer, put length in len */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
342 size = (int)(state->size);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
343 state->in[size - 1] = 0;
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
344 #ifdef NO_vsnprintf
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
345 # ifdef HAS_vsprintf_void
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
346 (void)vsprintf((char *)(state->in), format, va);
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
347 for (len = 0; len < size; len++)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
348 if (state->in[len] == 0) break;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
349 # else
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
350 len = vsprintf((char *)(state->in), format, va);
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
351 # endif
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
352 #else
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
353 # ifdef HAS_vsnprintf_void
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
354 (void)vsnprintf((char *)(state->in), size, format, va);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
355 len = strlen((char *)(state->in));
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
356 # else
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
357 len = vsnprintf((char *)(state->in), size, format, va);
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
358 # endif
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
359 #endif
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
360
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
361 /* check that printf() results fit in buffer */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
362 if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
363 return 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
364
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
365 /* update buffer and position, defer compression until needed */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
366 strm->avail_in = (unsigned)len;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
367 strm->next_in = state->in;
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
368 state->x.pos += len;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
369 return len;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
370 }
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
371
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
372 int ZEXPORTVA gzprintf(gzFile file, const char *format, ...)
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
373 {
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
374 va_list va;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
375 int ret;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
376
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
377 va_start(va, format);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
378 ret = gzvprintf(file, format, va);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
379 va_end(va);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
380 return ret;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
381 }
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
382
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
383 #else /* !STDC && !Z_HAVE_STDARG_H */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
384
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
385 /* -- see zlib.h -- */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
386 int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
387 a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
388 gzFile file;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
389 const char *format;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
390 int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
391 a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
392 {
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
393 int size, len;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
394 gz_statep state;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
395 z_streamp strm;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
396
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
397 /* get internal structure */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
398 if (file == NULL)
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
399 return -1;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
400 state = (gz_statep)file;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
401 strm = &(state->strm);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
402
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
403 /* check that can really pass pointer in ints */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
404 if (sizeof(int) != sizeof(void *))
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
405 return 0;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
406
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
407 /* check that we're writing and that there's no error */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
408 if (state->mode != GZ_WRITE || state->err != Z_OK)
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
409 return 0;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
410
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
411 /* make sure we have some buffer space */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
412 if (state->size == 0 && gz_init(state) == -1)
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
413 return 0;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
414
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
415 /* check for seek request */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
416 if (state->seek) {
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
417 state->seek = 0;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
418 if (gz_zero(state, state->skip) == -1)
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
419 return 0;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
420 }
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
421
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
422 /* consume whatever's left in the input buffer */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
423 if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
424 return 0;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
425
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
426 /* do the printf() into the input buffer, put length in len */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
427 size = (int)(state->size);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
428 state->in[size - 1] = 0;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
429 #ifdef NO_snprintf
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
430 # ifdef HAS_sprintf_void
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
431 sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
432 a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
433 for (len = 0; len < size; len++)
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
434 if (state->in[len] == 0) break;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
435 # else
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
436 len = sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
437 a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
438 # endif
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
439 #else
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
440 # ifdef HAS_snprintf_void
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
441 snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6, a7, a8,
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
442 a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
443 len = strlen((char *)(state->in));
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
444 # else
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
445 len = snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6,
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
446 a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18,
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
447 a19, a20);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
448 # endif
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
449 #endif
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
450
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
451 /* check that printf() results fit in buffer */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
452 if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
453 return 0;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
454
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
455 /* update buffer and position, defer compression until needed */
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
456 strm->avail_in = (unsigned)len;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
457 strm->next_in = state->in;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
458 state->x.pos += len;
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
459 return len;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
460 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
461
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
462 #endif
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
463
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
464 /* -- see zlib.h -- */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
465 int ZEXPORT gzflush(file, flush)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
466 gzFile file;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
467 int flush;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
468 {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
469 gz_statep state;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
470
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
471 /* get internal structure */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
472 if (file == NULL)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
473 return -1;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
474 state = (gz_statep)file;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
475
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
476 /* check that we're writing and that there's no error */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
477 if (state->mode != GZ_WRITE || state->err != Z_OK)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
478 return Z_STREAM_ERROR;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
479
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
480 /* check flush parameter */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
481 if (flush < 0 || flush > Z_FINISH)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
482 return Z_STREAM_ERROR;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
483
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
484 /* check for seek request */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
485 if (state->seek) {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
486 state->seek = 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
487 if (gz_zero(state, state->skip) == -1)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
488 return -1;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
489 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
490
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
491 /* compress remaining data with requested flush */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
492 gz_comp(state, flush);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
493 return state->err;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
494 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
495
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
496 /* -- see zlib.h -- */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
497 int ZEXPORT gzsetparams(file, level, strategy)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
498 gzFile file;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
499 int level;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
500 int strategy;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
501 {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
502 gz_statep state;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
503 z_streamp strm;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
504
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
505 /* get internal structure */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
506 if (file == NULL)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
507 return Z_STREAM_ERROR;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
508 state = (gz_statep)file;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
509 strm = &(state->strm);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
510
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
511 /* check that we're writing and that there's no error */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
512 if (state->mode != GZ_WRITE || state->err != Z_OK)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
513 return Z_STREAM_ERROR;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
514
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
515 /* if no change is requested, then do nothing */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
516 if (level == state->level && strategy == state->strategy)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
517 return Z_OK;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
518
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
519 /* check for seek request */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
520 if (state->seek) {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
521 state->seek = 0;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
522 if (gz_zero(state, state->skip) == -1)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
523 return -1;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
524 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
525
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
526 /* change compression parameters for subsequent input */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
527 if (state->size) {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
528 /* flush previous input with previous parameters before changing */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
529 if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
530 return state->err;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
531 deflateParams(strm, level, strategy);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
532 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
533 state->level = level;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
534 state->strategy = strategy;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
535 return Z_OK;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
536 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
537
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
538 /* -- see zlib.h -- */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
539 int ZEXPORT gzclose_w(file)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
540 gzFile file;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
541 {
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
542 int ret = Z_OK;
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
543 gz_statep state;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
544
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
545 /* get internal structure */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
546 if (file == NULL)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
547 return Z_STREAM_ERROR;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
548 state = (gz_statep)file;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
549
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
550 /* check that we're writing */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
551 if (state->mode != GZ_WRITE)
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
552 return Z_STREAM_ERROR;
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
553
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
554 /* check for seek request */
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
555 if (state->seek) {
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
556 state->seek = 0;
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
557 if (gz_zero(state, state->skip) == -1)
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
558 ret = state->err;
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
559 }
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
560
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
561 /* flush, free memory, and close file */
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
562 if (gz_comp(state, Z_FINISH) == -1)
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
563 ret = state->err;
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
564 if (state->size) {
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
565 if (!state->direct) {
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
566 (void)deflateEnd(&(state->strm));
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
567 free(state->out);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
568 }
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
569 free(state->in);
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
570 }
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
571 gz_error(state, Z_OK, NULL);
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
572 free(state->path);
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
573 if (close(state->fd) == -1)
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
574 ret = Z_ERRNO;
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
575 free(state);
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 64292
diff changeset
576 return ret;
64292
1aba7339fa6c Issue #9704: Add zlib files necessary to run configure
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
577 }