Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
git2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
git2
Commits
9b87998c
Commit
9b87998c
authored
Jul 04, 2014
by
Vicent Marti
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/cmn/update-zlib'
parents
98ce2318
b42ff7c0
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
1350 additions
and
449 deletions
+1350
-449
deps/zlib/adler32.c
+39
-29
deps/zlib/crc32.c
+33
-50
deps/zlib/crc32.h
+1
-1
deps/zlib/deflate.c
+198
-65
deps/zlib/deflate.h
+8
-4
deps/zlib/infback.c
+640
-0
deps/zlib/inffast.c
+3
-3
deps/zlib/inffixed.h
+3
-3
deps/zlib/inflate.c
+84
-52
deps/zlib/inftrees.c
+15
-39
deps/zlib/trees.c
+18
-36
deps/zlib/zconf.h
+4
-0
deps/zlib/zlib.h
+250
-95
deps/zlib/zutil.c
+13
-10
deps/zlib/zutil.h
+41
-62
No files found.
deps/zlib/adler32.c
View file @
9b87998c
/* adler32.c -- compute the Adler-32 checksum of a data stream
/* adler32.c -- compute the Adler-32 checksum of a data stream
* Copyright (C) 1995-20
07
Mark Adler
* Copyright (C) 1995-20
11
Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
* For conditions of distribution and use, see copyright notice in zlib.h
*/
*/
...
@@ -9,9 +9,9 @@
...
@@ -9,9 +9,9 @@
#define local static
#define local static
local
uLong
adler32_combine_
(
uLong
adler1
,
uLong
adler2
,
z_off64_t
len2
);
local
uLong
adler32_combine_
OF
((
uLong
adler1
,
uLong
adler2
,
z_off64_t
len2
)
);
#define BASE 65521
UL
/* largest prime smaller than 65536 */
#define BASE 65521
/* largest prime smaller than 65536 */
#define NMAX 5552
#define NMAX 5552
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
...
@@ -21,39 +21,44 @@ local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2);
...
@@ -21,39 +21,44 @@ local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2);
#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
#define DO16(buf) DO8(buf,0); DO8(buf,8);
#define DO16(buf) DO8(buf,0); DO8(buf,8);
/* use NO_DIVIDE if your processor does not do division in hardware */
/* use NO_DIVIDE if your processor does not do division in hardware --
try it both ways to see which is faster */
#ifdef NO_DIVIDE
#ifdef NO_DIVIDE
# define MOD(a) \
/* note that this assumes BASE is 65521, where 65536 % 65521 == 15
(thank you to John Reiser for pointing this out) */
# define CHOP(a) \
do { \
unsigned long tmp = a >> 16; \
a &= 0xffffUL; \
a += (tmp << 4) - tmp; \
} while (0)
# define MOD28(a) \
do { \
do { \
if (a >= (BASE << 16)) a -= (BASE << 16); \
CHOP(a); \
if (a >= (BASE << 15)) a -= (BASE << 15); \
if (a >= (BASE << 14)) a -= (BASE << 14); \
if (a >= (BASE << 13)) a -= (BASE << 13); \
if (a >= (BASE << 12)) a -= (BASE << 12); \
if (a >= (BASE << 11)) a -= (BASE << 11); \
if (a >= (BASE << 10)) a -= (BASE << 10); \
if (a >= (BASE << 9)) a -= (BASE << 9); \
if (a >= (BASE << 8)) a -= (BASE << 8); \
if (a >= (BASE << 7)) a -= (BASE << 7); \
if (a >= (BASE << 6)) a -= (BASE << 6); \
if (a >= (BASE << 5)) a -= (BASE << 5); \
if (a >= (BASE << 4)) a -= (BASE << 4); \
if (a >= (BASE << 3)) a -= (BASE << 3); \
if (a >= (BASE << 2)) a -= (BASE << 2); \
if (a >= (BASE << 1)) a -= (BASE << 1); \
if (a >= BASE) a -= BASE; \
if (a >= BASE) a -= BASE; \
} while (0)
} while (0)
# define MOD
4
(a) \
# define MOD(a) \
do { \
do { \
if (a >= (BASE << 4)) a -= (BASE << 4); \
CHOP(a); \
if (a >= (BASE << 3)) a -= (BASE << 3); \
MOD28(a); \
if (a >= (BASE << 2)) a -= (BASE << 2); \
} while (0)
if (a >= (BASE << 1)) a -= (BASE << 1); \
# define MOD63(a) \
do {
/* this assumes a is not negative */
\
z_off64_t tmp = a >> 32; \
a &= 0xffffffffL; \
a += (tmp << 8) - (tmp << 5) + tmp; \
tmp = a >> 16; \
a &= 0xffffL; \
a += (tmp << 4) - tmp; \
tmp = a >> 16; \
a &= 0xffffL; \
a += (tmp << 4) - tmp; \
if (a >= BASE) a -= BASE; \
if (a >= BASE) a -= BASE; \
} while (0)
} while (0)
#else
#else
# define MOD(a) a %= BASE
# define MOD(a) a %= BASE
# define MOD4(a) a %= BASE
# define MOD28(a) a %= BASE
# define MOD63(a) a %= BASE
#endif
#endif
/* ========================================================================= */
/* ========================================================================= */
...
@@ -92,7 +97,7 @@ uLong ZEXPORT adler32(adler, buf, len)
...
@@ -92,7 +97,7 @@ uLong ZEXPORT adler32(adler, buf, len)
}
}
if
(
adler
>=
BASE
)
if
(
adler
>=
BASE
)
adler
-=
BASE
;
adler
-=
BASE
;
MOD
4
(
sum2
);
/* only added so many BASE's */
MOD
28
(
sum2
);
/* only added so many BASE's */
return
adler
|
(
sum2
<<
16
);
return
adler
|
(
sum2
<<
16
);
}
}
...
@@ -137,8 +142,13 @@ local uLong adler32_combine_(adler1, adler2, len2)
...
@@ -137,8 +142,13 @@ local uLong adler32_combine_(adler1, adler2, len2)
unsigned
long
sum2
;
unsigned
long
sum2
;
unsigned
rem
;
unsigned
rem
;
/* for negative len, return invalid adler32 as a clue for debugging */
if
(
len2
<
0
)
return
0xffffffffUL
;
/* the derivation of this formula is left as an exercise for the reader */
/* the derivation of this formula is left as an exercise for the reader */
rem
=
(
unsigned
)(
len2
%
BASE
);
MOD63
(
len2
);
/* assumes len2 >= 0 */
rem
=
(
unsigned
)
len2
;
sum1
=
adler1
&
0xffff
;
sum1
=
adler1
&
0xffff
;
sum2
=
rem
*
sum1
;
sum2
=
rem
*
sum1
;
MOD
(
sum2
);
MOD
(
sum2
);
...
...
deps/zlib/crc32.c
View file @
9b87998c
/* crc32.c -- compute the CRC-32 of a data stream
/* crc32.c -- compute the CRC-32 of a data stream
* Copyright (C) 1995-2006, 2010 Mark Adler
* Copyright (C) 1995-2006, 2010
, 2011, 2012
Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
* For conditions of distribution and use, see copyright notice in zlib.h
*
*
* Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
* Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
...
@@ -17,6 +17,8 @@
...
@@ -17,6 +17,8 @@
of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should
of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should
first call get_crc_table() to initialize the tables before allowing more than
first call get_crc_table() to initialize the tables before allowing more than
one thread to use crc32().
one thread to use crc32().
DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h.
*/
*/
#ifdef MAKECRCH
#ifdef MAKECRCH
...
@@ -30,31 +32,11 @@
...
@@ -30,31 +32,11 @@
#define local static
#define local static
/* Find a four-byte integer type for crc32_little() and crc32_big(). */
#ifndef NOBYFOUR
# ifdef STDC
/* need ANSI C limits.h to determine sizes */
# include <limits.h>
# define BYFOUR
# if (UINT_MAX == 0xffffffffUL)
typedef
unsigned
int
u4
;
# else
# if (ULONG_MAX == 0xffffffffUL)
typedef
unsigned
long
u4
;
# else
# if (USHRT_MAX == 0xffffffffUL)
typedef
unsigned
short
u4
;
# else
# undef BYFOUR
/* can't find a four-byte integer type! */
# endif
# endif
# endif
# endif
/* STDC */
#endif
/* !NOBYFOUR */
/* Definitions for doing the crc four data bytes at a time. */
/* Definitions for doing the crc four data bytes at a time. */
#if !defined(NOBYFOUR) && defined(Z_U4)
# define BYFOUR
#endif
#ifdef BYFOUR
#ifdef BYFOUR
# define REV(w) ((((w)>>24)&0xff)+(((w)>>8)&0xff00)+ \
(((w)&0xff00)<<8)+(((w)&0xff)<<24))
local
unsigned
long
crc32_little
OF
((
unsigned
long
,
local
unsigned
long
crc32_little
OF
((
unsigned
long
,
const
unsigned
char
FAR
*
,
unsigned
));
const
unsigned
char
FAR
*
,
unsigned
));
local
unsigned
long
crc32_big
OF
((
unsigned
long
,
local
unsigned
long
crc32_big
OF
((
unsigned
long
,
...
@@ -68,16 +50,16 @@
...
@@ -68,16 +50,16 @@
local
unsigned
long
gf2_matrix_times
OF
((
unsigned
long
*
mat
,
local
unsigned
long
gf2_matrix_times
OF
((
unsigned
long
*
mat
,
unsigned
long
vec
));
unsigned
long
vec
));
local
void
gf2_matrix_square
OF
((
unsigned
long
*
square
,
unsigned
long
*
mat
));
local
void
gf2_matrix_square
OF
((
unsigned
long
*
square
,
unsigned
long
*
mat
));
local
uLong
crc32_combine_
(
uLong
crc1
,
uLong
crc2
,
z_off64_t
len2
);
local
uLong
crc32_combine_
OF
((
uLong
crc1
,
uLong
crc2
,
z_off64_t
len2
)
);
#ifdef DYNAMIC_CRC_TABLE
#ifdef DYNAMIC_CRC_TABLE
local
volatile
int
crc_table_empty
=
1
;
local
volatile
int
crc_table_empty
=
1
;
local
unsigned
long
FAR
crc_table
[
TBLS
][
256
];
local
z_crc_t
FAR
crc_table
[
TBLS
][
256
];
local
void
make_crc_table
OF
((
void
));
local
void
make_crc_table
OF
((
void
));
#ifdef MAKECRCH
#ifdef MAKECRCH
local
void
write_table
OF
((
FILE
*
,
const
unsigned
long
FAR
*
));
local
void
write_table
OF
((
FILE
*
,
const
z_crc_t
FAR
*
));
#endif
/* MAKECRCH */
#endif
/* MAKECRCH */
/*
/*
Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
...
@@ -107,9 +89,9 @@ local void make_crc_table OF((void));
...
@@ -107,9 +89,9 @@ local void make_crc_table OF((void));
*/
*/
local
void
make_crc_table
()
local
void
make_crc_table
()
{
{
unsigned
long
c
;
z_crc_t
c
;
int
n
,
k
;
int
n
,
k
;
unsigned
long
poly
;
/* polynomial exclusive-or pattern */
z_crc_t
poly
;
/* polynomial exclusive-or pattern */
/* terms of polynomial defining this crc (except x^32): */
/* terms of polynomial defining this crc (except x^32): */
static
volatile
int
first
=
1
;
/* flag to limit concurrent making */
static
volatile
int
first
=
1
;
/* flag to limit concurrent making */
static
const
unsigned
char
p
[]
=
{
0
,
1
,
2
,
4
,
5
,
7
,
8
,
10
,
11
,
12
,
16
,
22
,
23
,
26
};
static
const
unsigned
char
p
[]
=
{
0
,
1
,
2
,
4
,
5
,
7
,
8
,
10
,
11
,
12
,
16
,
22
,
23
,
26
};
...
@@ -121,13 +103,13 @@ local void make_crc_table()
...
@@ -121,13 +103,13 @@ local void make_crc_table()
first
=
0
;
first
=
0
;
/* make exclusive-or pattern from polynomial (0xedb88320UL) */
/* make exclusive-or pattern from polynomial (0xedb88320UL) */
poly
=
0
UL
;
poly
=
0
;
for
(
n
=
0
;
n
<
sizeof
(
p
)
/
sizeof
(
unsigned
char
);
n
++
)
for
(
n
=
0
;
n
<
(
int
)(
sizeof
(
p
)
/
sizeof
(
unsigned
char
)
);
n
++
)
poly
|=
1UL
<<
(
31
-
p
[
n
]);
poly
|=
(
z_crc_t
)
1
<<
(
31
-
p
[
n
]);
/* generate a crc for every 8-bit value */
/* generate a crc for every 8-bit value */
for
(
n
=
0
;
n
<
256
;
n
++
)
{
for
(
n
=
0
;
n
<
256
;
n
++
)
{
c
=
(
unsigned
long
)
n
;
c
=
(
z_crc_t
)
n
;
for
(
k
=
0
;
k
<
8
;
k
++
)
for
(
k
=
0
;
k
<
8
;
k
++
)
c
=
c
&
1
?
poly
^
(
c
>>
1
)
:
c
>>
1
;
c
=
c
&
1
?
poly
^
(
c
>>
1
)
:
c
>>
1
;
crc_table
[
0
][
n
]
=
c
;
crc_table
[
0
][
n
]
=
c
;
...
@@ -138,11 +120,11 @@ local void make_crc_table()
...
@@ -138,11 +120,11 @@ local void make_crc_table()
and then the byte reversal of those as well as the first table */
and then the byte reversal of those as well as the first table */
for
(
n
=
0
;
n
<
256
;
n
++
)
{
for
(
n
=
0
;
n
<
256
;
n
++
)
{
c
=
crc_table
[
0
][
n
];
c
=
crc_table
[
0
][
n
];
crc_table
[
4
][
n
]
=
REV
(
c
);
crc_table
[
4
][
n
]
=
ZSWAP32
(
c
);
for
(
k
=
1
;
k
<
4
;
k
++
)
{
for
(
k
=
1
;
k
<
4
;
k
++
)
{
c
=
crc_table
[
0
][
c
&
0xff
]
^
(
c
>>
8
);
c
=
crc_table
[
0
][
c
&
0xff
]
^
(
c
>>
8
);
crc_table
[
k
][
n
]
=
c
;
crc_table
[
k
][
n
]
=
c
;
crc_table
[
k
+
4
][
n
]
=
REV
(
c
);
crc_table
[
k
+
4
][
n
]
=
ZSWAP32
(
c
);
}
}
}
}
#endif
/* BYFOUR */
#endif
/* BYFOUR */
...
@@ -164,7 +146,7 @@ local void make_crc_table()
...
@@ -164,7 +146,7 @@ local void make_crc_table()
if
(
out
==
NULL
)
return
;
if
(
out
==
NULL
)
return
;
fprintf
(
out
,
"/* crc32.h -- tables for rapid CRC calculation
\n
"
);
fprintf
(
out
,
"/* crc32.h -- tables for rapid CRC calculation
\n
"
);
fprintf
(
out
,
" * Generated automatically by crc32.c
\n
*/
\n\n
"
);
fprintf
(
out
,
" * Generated automatically by crc32.c
\n
*/
\n\n
"
);
fprintf
(
out
,
"local const
unsigned long
FAR "
);
fprintf
(
out
,
"local const
z_crc_t
FAR "
);
fprintf
(
out
,
"crc_table[TBLS][256] =
\n
{
\n
{
\n
"
);
fprintf
(
out
,
"crc_table[TBLS][256] =
\n
{
\n
{
\n
"
);
write_table
(
out
,
crc_table
[
0
]);
write_table
(
out
,
crc_table
[
0
]);
# ifdef BYFOUR
# ifdef BYFOUR
...
@@ -184,12 +166,13 @@ local void make_crc_table()
...
@@ -184,12 +166,13 @@ local void make_crc_table()
#ifdef MAKECRCH
#ifdef MAKECRCH
local
void
write_table
(
out
,
table
)
local
void
write_table
(
out
,
table
)
FILE
*
out
;
FILE
*
out
;
const
unsigned
long
FAR
*
table
;
const
z_crc_t
FAR
*
table
;
{
{
int
n
;
int
n
;
for
(
n
=
0
;
n
<
256
;
n
++
)
for
(
n
=
0
;
n
<
256
;
n
++
)
fprintf
(
out
,
"%s0x%08lxUL%s"
,
n
%
5
?
""
:
" "
,
table
[
n
],
fprintf
(
out
,
"%s0x%08lxUL%s"
,
n
%
5
?
""
:
" "
,
(
unsigned
long
)(
table
[
n
]),
n
==
255
?
"
\n
"
:
(
n
%
5
==
4
?
",
\n
"
:
", "
));
n
==
255
?
"
\n
"
:
(
n
%
5
==
4
?
",
\n
"
:
", "
));
}
}
#endif
/* MAKECRCH */
#endif
/* MAKECRCH */
...
@@ -204,13 +187,13 @@ local void write_table(out, table)
...
@@ -204,13 +187,13 @@ local void write_table(out, table)
/* =========================================================================
/* =========================================================================
* This function can be used by asm versions of crc32()
* This function can be used by asm versions of crc32()
*/
*/
const
unsigned
long
FAR
*
ZEXPORT
get_crc_table
()
const
z_crc_t
FAR
*
ZEXPORT
get_crc_table
()
{
{
#ifdef DYNAMIC_CRC_TABLE
#ifdef DYNAMIC_CRC_TABLE
if
(
crc_table_empty
)
if
(
crc_table_empty
)
make_crc_table
();
make_crc_table
();
#endif
/* DYNAMIC_CRC_TABLE */
#endif
/* DYNAMIC_CRC_TABLE */
return
(
const
unsigned
long
FAR
*
)
crc_table
;
return
(
const
z_crc_t
FAR
*
)
crc_table
;
}
}
/* ========================================================================= */
/* ========================================================================= */
...
@@ -232,7 +215,7 @@ unsigned long ZEXPORT crc32(crc, buf, len)
...
@@ -232,7 +215,7 @@ unsigned long ZEXPORT crc32(crc, buf, len)
#ifdef BYFOUR
#ifdef BYFOUR
if
(
sizeof
(
void
*
)
==
sizeof
(
ptrdiff_t
))
{
if
(
sizeof
(
void
*
)
==
sizeof
(
ptrdiff_t
))
{
u4
endian
;
z_crc_t
endian
;
endian
=
1
;
endian
=
1
;
if
(
*
((
unsigned
char
*
)(
&
endian
)))
if
(
*
((
unsigned
char
*
)(
&
endian
)))
...
@@ -266,17 +249,17 @@ local unsigned long crc32_little(crc, buf, len)
...
@@ -266,17 +249,17 @@ local unsigned long crc32_little(crc, buf, len)
const
unsigned
char
FAR
*
buf
;
const
unsigned
char
FAR
*
buf
;
unsigned
len
;
unsigned
len
;
{
{
register
u4
c
;
register
z_crc_t
c
;
register
const
u4
FAR
*
buf4
;
register
const
z_crc_t
FAR
*
buf4
;
c
=
(
u4
)
crc
;
c
=
(
z_crc_t
)
crc
;
c
=
~
c
;
c
=
~
c
;
while
(
len
&&
((
ptrdiff_t
)
buf
&
3
))
{
while
(
len
&&
((
ptrdiff_t
)
buf
&
3
))
{
c
=
crc_table
[
0
][(
c
^
*
buf
++
)
&
0xff
]
^
(
c
>>
8
);
c
=
crc_table
[
0
][(
c
^
*
buf
++
)
&
0xff
]
^
(
c
>>
8
);
len
--
;
len
--
;
}
}
buf4
=
(
const
u4
FAR
*
)(
const
void
FAR
*
)
buf
;
buf4
=
(
const
z_crc_t
FAR
*
)(
const
void
FAR
*
)
buf
;
while
(
len
>=
32
)
{
while
(
len
>=
32
)
{
DOLIT32
;
DOLIT32
;
len
-=
32
;
len
-=
32
;
...
@@ -306,17 +289,17 @@ local unsigned long crc32_big(crc, buf, len)
...
@@ -306,17 +289,17 @@ local unsigned long crc32_big(crc, buf, len)
const
unsigned
char
FAR
*
buf
;
const
unsigned
char
FAR
*
buf
;
unsigned
len
;
unsigned
len
;
{
{
register
u4
c
;
register
z_crc_t
c
;
register
const
u4
FAR
*
buf4
;
register
const
z_crc_t
FAR
*
buf4
;
c
=
REV
((
u4
)
crc
);
c
=
ZSWAP32
((
z_crc_t
)
crc
);
c
=
~
c
;
c
=
~
c
;
while
(
len
&&
((
ptrdiff_t
)
buf
&
3
))
{
while
(
len
&&
((
ptrdiff_t
)
buf
&
3
))
{
c
=
crc_table
[
4
][(
c
>>
24
)
^
*
buf
++
]
^
(
c
<<
8
);
c
=
crc_table
[
4
][(
c
>>
24
)
^
*
buf
++
]
^
(
c
<<
8
);
len
--
;
len
--
;
}
}
buf4
=
(
const
u4
FAR
*
)(
const
void
FAR
*
)
buf
;
buf4
=
(
const
z_crc_t
FAR
*
)(
const
void
FAR
*
)
buf
;
buf4
--
;
buf4
--
;
while
(
len
>=
32
)
{
while
(
len
>=
32
)
{
DOBIG32
;
DOBIG32
;
...
@@ -333,7 +316,7 @@ local unsigned long crc32_big(crc, buf, len)
...
@@ -333,7 +316,7 @@ local unsigned long crc32_big(crc, buf, len)
c
=
crc_table
[
4
][(
c
>>
24
)
^
*
buf
++
]
^
(
c
<<
8
);
c
=
crc_table
[
4
][(
c
>>
24
)
^
*
buf
++
]
^
(
c
<<
8
);
}
while
(
--
len
);
}
while
(
--
len
);
c
=
~
c
;
c
=
~
c
;
return
(
unsigned
long
)(
REV
(
c
));
return
(
unsigned
long
)(
ZSWAP32
(
c
));
}
}
#endif
/* BYFOUR */
#endif
/* BYFOUR */
...
...
deps/zlib/crc32.h
View file @
9b87998c
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* Generated automatically by crc32.c
* Generated automatically by crc32.c
*/
*/
local
const
unsigned
long
FAR
crc_table
[
TBLS
][
256
]
=
local
const
z_crc_t
FAR
crc_table
[
TBLS
][
256
]
=
{
{
{
{
0x00000000UL
,
0x77073096UL
,
0xee0e612cUL
,
0x990951baUL
,
0x076dc419UL
,
0x00000000UL
,
0x77073096UL
,
0xee0e612cUL
,
0x990951baUL
,
0x076dc419UL
,
...
...
deps/zlib/deflate.c
View file @
9b87998c
/* deflate.c -- compress data using the deflation algorithm
/* deflate.c -- compress data using the deflation algorithm
* Copyright (C) 1995-201
0
Jean-loup Gailly and Mark Adler
* Copyright (C) 1995-201
3
Jean-loup Gailly and Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
* For conditions of distribution and use, see copyright notice in zlib.h
*/
*/
...
@@ -37,7 +37,7 @@
...
@@ -37,7 +37,7 @@
* REFERENCES
* REFERENCES
*
*
* Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
* Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
* Available in http://
www.ietf.org/rfc/rfc1951.txt
* Available in http://
tools.ietf.org/html/rfc1951
*
*
* A description of the Rabin and Karp algorithm is given in the book
* A description of the Rabin and Karp algorithm is given in the book
* "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
* "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
...
@@ -52,7 +52,7 @@
...
@@ -52,7 +52,7 @@
#include "deflate.h"
#include "deflate.h"
const
char
deflate_copyright
[]
=
const
char
deflate_copyright
[]
=
" deflate 1.2.
5 Copyright 1995-2010
Jean-loup Gailly and Mark Adler "
;
" deflate 1.2.
8 Copyright 1995-2013
Jean-loup Gailly and Mark Adler "
;
/*
/*
If you use the zlib library in a product, an acknowledgment is welcome
If you use the zlib library in a product, an acknowledgment is welcome
in the documentation of your product. If for some reason you cannot
in the documentation of your product. If for some reason you cannot
...
@@ -155,6 +155,9 @@ local const config configuration_table[10] = {
...
@@ -155,6 +155,9 @@ local const config configuration_table[10] = {
struct
static_tree_desc_s
{
int
dummy
;};
/* for buggy compilers */
struct
static_tree_desc_s
{
int
dummy
;};
/* for buggy compilers */
#endif
#endif
/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0))
/* ===========================================================================
/* ===========================================================================
* Update a hash value with the given input byte
* Update a hash value with the given input byte
* IN assertion: all calls to to UPDATE_HASH are made with consecutive
* IN assertion: all calls to to UPDATE_HASH are made with consecutive
...
@@ -235,10 +238,19 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
...
@@ -235,10 +238,19 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
strm
->
msg
=
Z_NULL
;
strm
->
msg
=
Z_NULL
;
if
(
strm
->
zalloc
==
(
alloc_func
)
0
)
{
if
(
strm
->
zalloc
==
(
alloc_func
)
0
)
{
#ifdef Z_SOLO
return
Z_STREAM_ERROR
;
#else
strm
->
zalloc
=
zcalloc
;
strm
->
zalloc
=
zcalloc
;
strm
->
opaque
=
(
voidpf
)
0
;
strm
->
opaque
=
(
voidpf
)
0
;
#endif
}
}
if
(
strm
->
zfree
==
(
free_func
)
0
)
strm
->
zfree
=
zcfree
;
if
(
strm
->
zfree
==
(
free_func
)
0
)
#ifdef Z_SOLO
return
Z_STREAM_ERROR
;
#else
strm
->
zfree
=
zcfree
;
#endif
#ifdef FASTEST
#ifdef FASTEST
if
(
level
!=
0
)
level
=
1
;
if
(
level
!=
0
)
level
=
1
;
...
@@ -293,7 +305,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
...
@@ -293,7 +305,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
if
(
s
->
window
==
Z_NULL
||
s
->
prev
==
Z_NULL
||
s
->
head
==
Z_NULL
||
if
(
s
->
window
==
Z_NULL
||
s
->
prev
==
Z_NULL
||
s
->
head
==
Z_NULL
||
s
->
pending_buf
==
Z_NULL
)
{
s
->
pending_buf
==
Z_NULL
)
{
s
->
status
=
FINISH_STATE
;
s
->
status
=
FINISH_STATE
;
strm
->
msg
=
(
char
*
)
ERR_MSG
(
Z_MEM_ERROR
);
strm
->
msg
=
ERR_MSG
(
Z_MEM_ERROR
);
deflateEnd
(
strm
);
deflateEnd
(
strm
);
return
Z_MEM_ERROR
;
return
Z_MEM_ERROR
;
}
}
...
@@ -314,43 +326,70 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
...
@@ -314,43 +326,70 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
uInt
dictLength
;
uInt
dictLength
;
{
{
deflate_state
*
s
;
deflate_state
*
s
;
uInt
length
=
dictLength
;
uInt
str
,
n
;
uInt
n
;
int
wrap
;
IPos
hash_head
=
0
;
unsigned
avail
;
z_const
unsigned
char
*
next
;
if
(
strm
==
Z_NULL
||
strm
->
state
==
Z_NULL
||
dictionary
==
Z_NULL
||
if
(
strm
==
Z_NULL
||
strm
->
state
==
Z_NULL
||
dictionary
==
Z_NULL
)
strm
->
state
->
wrap
==
2
||
(
strm
->
state
->
wrap
==
1
&&
strm
->
state
->
status
!=
INIT_STATE
))
return
Z_STREAM_ERROR
;
return
Z_STREAM_ERROR
;
s
=
strm
->
state
;
s
=
strm
->
state
;
if
(
s
->
wrap
)
wrap
=
s
->
wrap
;
strm
->
adler
=
adler32
(
strm
->
adler
,
dictionary
,
dictLength
);
if
(
wrap
==
2
||
(
wrap
==
1
&&
s
->
status
!=
INIT_STATE
)
||
s
->
lookahead
)
return
Z_STREAM_ERROR
;
if
(
length
<
MIN_MATCH
)
return
Z_OK
;
/* when using zlib wrappers, compute Adler-32 for provided dictionary */
if
(
length
>
s
->
w_size
)
{
if
(
wrap
==
1
)
length
=
s
->
w_size
;
strm
->
adler
=
adler32
(
strm
->
adler
,
dictionary
,
dictLength
);
dictionary
+=
dictLength
-
length
;
/* use the tail of the dictionary */
s
->
wrap
=
0
;
/* avoid computing Adler-32 in read_buf */
/* if dictionary would fill window, just replace the history */
if
(
dictLength
>=
s
->
w_size
)
{
if
(
wrap
==
0
)
{
/* already empty otherwise */
CLEAR_HASH
(
s
);
s
->
strstart
=
0
;
s
->
block_start
=
0L
;
s
->
insert
=
0
;
}
dictionary
+=
dictLength
-
s
->
w_size
;
/* use the tail */
dictLength
=
s
->
w_size
;
}
}
zmemcpy
(
s
->
window
,
dictionary
,
length
);
s
->
strstart
=
length
;
s
->
block_start
=
(
long
)
length
;
/* Insert all strings in the hash table (except for the last two bytes).
/* insert dictionary into window and hash */
* s->lookahead stays null, so s->ins_h will be recomputed at the next
avail
=
strm
->
avail_in
;
* call of fill_window.
next
=
strm
->
next_in
;
*/
strm
->
avail_in
=
dictLength
;
s
->
ins_h
=
s
->
window
[
0
];
strm
->
next_in
=
(
z_const
Bytef
*
)
dictionary
;
UPDATE_HASH
(
s
,
s
->
ins_h
,
s
->
window
[
1
]);
fill_window
(
s
);
for
(
n
=
0
;
n
<=
length
-
MIN_MATCH
;
n
++
)
{
while
(
s
->
lookahead
>=
MIN_MATCH
)
{
INSERT_STRING
(
s
,
n
,
hash_head
);
str
=
s
->
strstart
;
n
=
s
->
lookahead
-
(
MIN_MATCH
-
1
);
do
{
UPDATE_HASH
(
s
,
s
->
ins_h
,
s
->
window
[
str
+
MIN_MATCH
-
1
]);
#ifndef FASTEST
s
->
prev
[
str
&
s
->
w_mask
]
=
s
->
head
[
s
->
ins_h
];
#endif
s
->
head
[
s
->
ins_h
]
=
(
Pos
)
str
;
str
++
;
}
while
(
--
n
);
s
->
strstart
=
str
;
s
->
lookahead
=
MIN_MATCH
-
1
;
fill_window
(
s
);
}
}
if
(
hash_head
)
hash_head
=
0
;
/* to make compiler happy */
s
->
strstart
+=
s
->
lookahead
;
s
->
block_start
=
(
long
)
s
->
strstart
;
s
->
insert
=
s
->
lookahead
;
s
->
lookahead
=
0
;
s
->
match_length
=
s
->
prev_length
=
MIN_MATCH
-
1
;
s
->
match_available
=
0
;
strm
->
next_in
=
next
;
strm
->
avail_in
=
avail
;
s
->
wrap
=
wrap
;
return
Z_OK
;
return
Z_OK
;
}
}
/* ========================================================================= */
/* ========================================================================= */
int
ZEXPORT
deflateReset
(
strm
)
int
ZEXPORT
deflateReset
Keep
(
strm
)
z_streamp
strm
;
z_streamp
strm
;
{
{
deflate_state
*
s
;
deflate_state
*
s
;
...
@@ -380,12 +419,23 @@ int ZEXPORT deflateReset (strm)
...
@@ -380,12 +419,23 @@ int ZEXPORT deflateReset (strm)
s
->
last_flush
=
Z_NO_FLUSH
;
s
->
last_flush
=
Z_NO_FLUSH
;
_tr_init
(
s
);
_tr_init
(
s
);
lm_init
(
s
);
return
Z_OK
;
return
Z_OK
;
}
}
/* ========================================================================= */
/* ========================================================================= */
int
ZEXPORT
deflateReset
(
strm
)
z_streamp
strm
;
{
int
ret
;
ret
=
deflateResetKeep
(
strm
);
if
(
ret
==
Z_OK
)
lm_init
(
strm
->
state
);
return
ret
;
}
/* ========================================================================= */
int
ZEXPORT
deflateSetHeader
(
strm
,
head
)
int
ZEXPORT
deflateSetHeader
(
strm
,
head
)
z_streamp
strm
;
z_streamp
strm
;
gz_headerp
head
;
gz_headerp
head
;
...
@@ -397,14 +447,42 @@ int ZEXPORT deflateSetHeader (strm, head)
...
@@ -397,14 +447,42 @@ int ZEXPORT deflateSetHeader (strm, head)
}
}
/* ========================================================================= */
/* ========================================================================= */
int
ZEXPORT
deflatePending
(
strm
,
pending
,
bits
)
unsigned
*
pending
;
int
*
bits
;
z_streamp
strm
;
{
if
(
strm
==
Z_NULL
||
strm
->
state
==
Z_NULL
)
return
Z_STREAM_ERROR
;
if
(
pending
!=
Z_NULL
)
*
pending
=
strm
->
state
->
pending
;
if
(
bits
!=
Z_NULL
)
*
bits
=
strm
->
state
->
bi_valid
;
return
Z_OK
;
}
/* ========================================================================= */
int
ZEXPORT
deflatePrime
(
strm
,
bits
,
value
)
int
ZEXPORT
deflatePrime
(
strm
,
bits
,
value
)
z_streamp
strm
;
z_streamp
strm
;
int
bits
;
int
bits
;
int
value
;
int
value
;
{
{
deflate_state
*
s
;
int
put
;
if
(
strm
==
Z_NULL
||
strm
->
state
==
Z_NULL
)
return
Z_STREAM_ERROR
;
if
(
strm
==
Z_NULL
||
strm
->
state
==
Z_NULL
)
return
Z_STREAM_ERROR
;
strm
->
state
->
bi_valid
=
bits
;
s
=
strm
->
state
;
strm
->
state
->
bi_buf
=
(
ush
)(
value
&
((
1
<<
bits
)
-
1
));
if
((
Bytef
*
)(
s
->
d_buf
)
<
s
->
pending_out
+
((
Buf_size
+
7
)
>>
3
))
return
Z_BUF_ERROR
;
do
{
put
=
Buf_size
-
s
->
bi_valid
;
if
(
put
>
bits
)
put
=
bits
;
s
->
bi_buf
|=
(
ush
)((
value
&
((
1
<<
put
)
-
1
))
<<
s
->
bi_valid
);
s
->
bi_valid
+=
put
;
_tr_flush_bits
(
s
);
value
>>=
put
;
bits
-=
put
;
}
while
(
bits
);
return
Z_OK
;
return
Z_OK
;
}
}
...
@@ -435,6 +513,8 @@ int ZEXPORT deflateParams(strm, level, strategy)
...
@@ -435,6 +513,8 @@ int ZEXPORT deflateParams(strm, level, strategy)
strm
->
total_in
!=
0
)
{
strm
->
total_in
!=
0
)
{
/* Flush the last buffer: */
/* Flush the last buffer: */
err
=
deflate
(
strm
,
Z_BLOCK
);
err
=
deflate
(
strm
,
Z_BLOCK
);
if
(
err
==
Z_BUF_ERROR
&&
s
->
pending
==
0
)
err
=
Z_OK
;
}
}
if
(
s
->
level
!=
level
)
{
if
(
s
->
level
!=
level
)
{
s
->
level
=
level
;
s
->
level
=
level
;
...
@@ -562,19 +642,22 @@ local void putShortMSB (s, b)
...
@@ -562,19 +642,22 @@ local void putShortMSB (s, b)
local
void
flush_pending
(
strm
)
local
void
flush_pending
(
strm
)
z_streamp
strm
;
z_streamp
strm
;
{
{
unsigned
len
=
strm
->
state
->
pending
;
unsigned
len
;
deflate_state
*
s
=
strm
->
state
;
_tr_flush_bits
(
s
);
len
=
s
->
pending
;
if
(
len
>
strm
->
avail_out
)
len
=
strm
->
avail_out
;
if
(
len
>
strm
->
avail_out
)
len
=
strm
->
avail_out
;
if
(
len
==
0
)
return
;
if
(
len
==
0
)
return
;
zmemcpy
(
strm
->
next_out
,
s
trm
->
state
->
pending_out
,
len
);
zmemcpy
(
strm
->
next_out
,
s
->
pending_out
,
len
);
strm
->
next_out
+=
len
;
strm
->
next_out
+=
len
;
s
trm
->
state
->
pending_out
+=
len
;
s
->
pending_out
+=
len
;
strm
->
total_out
+=
len
;
strm
->
total_out
+=
len
;
strm
->
avail_out
-=
len
;
strm
->
avail_out
-=
len
;
s
trm
->
state
->
pending
-=
len
;
s
->
pending
-=
len
;
if
(
s
trm
->
state
->
pending
==
0
)
{
if
(
s
->
pending
==
0
)
{
s
trm
->
state
->
pending_out
=
strm
->
state
->
pending_buf
;
s
->
pending_out
=
s
->
pending_buf
;
}
}
}
}
...
@@ -801,7 +884,7 @@ int ZEXPORT deflate (strm, flush)
...
@@ -801,7 +884,7 @@ int ZEXPORT deflate (strm, flush)
* flushes. For repeated and useless calls with Z_FINISH, we keep
* flushes. For repeated and useless calls with Z_FINISH, we keep
* returning Z_STREAM_END instead of Z_BUF_ERROR.
* returning Z_STREAM_END instead of Z_BUF_ERROR.
*/
*/
}
else
if
(
strm
->
avail_in
==
0
&&
flush
<=
old_flush
&&
}
else
if
(
strm
->
avail_in
==
0
&&
RANK
(
flush
)
<=
RANK
(
old_flush
)
&&
flush
!=
Z_FINISH
)
{
flush
!=
Z_FINISH
)
{
ERR_RETURN
(
strm
,
Z_BUF_ERROR
);
ERR_RETURN
(
strm
,
Z_BUF_ERROR
);
}
}
...
@@ -850,6 +933,7 @@ int ZEXPORT deflate (strm, flush)
...
@@ -850,6 +933,7 @@ int ZEXPORT deflate (strm, flush)
if
(
s
->
lookahead
==
0
)
{
if
(
s
->
lookahead
==
0
)
{
s
->
strstart
=
0
;
s
->
strstart
=
0
;
s
->
block_start
=
0L
;
s
->
block_start
=
0L
;
s
->
insert
=
0
;
}
}
}
}
}
}
...
@@ -945,12 +1029,12 @@ int ZEXPORT deflateCopy (dest, source)
...
@@ -945,12 +1029,12 @@ int ZEXPORT deflateCopy (dest, source)
ss
=
source
->
state
;
ss
=
source
->
state
;
zmemcpy
(
dest
,
source
,
sizeof
(
z_stream
));
zmemcpy
(
(
voidpf
)
dest
,
(
voidpf
)
source
,
sizeof
(
z_stream
));
ds
=
(
deflate_state
*
)
ZALLOC
(
dest
,
1
,
sizeof
(
deflate_state
));
ds
=
(
deflate_state
*
)
ZALLOC
(
dest
,
1
,
sizeof
(
deflate_state
));
if
(
ds
==
Z_NULL
)
return
Z_MEM_ERROR
;
if
(
ds
==
Z_NULL
)
return
Z_MEM_ERROR
;
dest
->
state
=
(
struct
internal_state
FAR
*
)
ds
;
dest
->
state
=
(
struct
internal_state
FAR
*
)
ds
;
zmemcpy
(
ds
,
ss
,
sizeof
(
deflate_state
));
zmemcpy
(
(
voidpf
)
ds
,
(
voidpf
)
ss
,
sizeof
(
deflate_state
));
ds
->
strm
=
dest
;
ds
->
strm
=
dest
;
ds
->
window
=
(
Bytef
*
)
ZALLOC
(
dest
,
ds
->
w_size
,
2
*
sizeof
(
Byte
));
ds
->
window
=
(
Bytef
*
)
ZALLOC
(
dest
,
ds
->
w_size
,
2
*
sizeof
(
Byte
));
...
@@ -966,8 +1050,8 @@ int ZEXPORT deflateCopy (dest, source)
...
@@ -966,8 +1050,8 @@ int ZEXPORT deflateCopy (dest, source)
}
}
/* following zmemcpy do not work for 16-bit MSDOS */
/* following zmemcpy do not work for 16-bit MSDOS */
zmemcpy
(
ds
->
window
,
ss
->
window
,
ds
->
w_size
*
2
*
sizeof
(
Byte
));
zmemcpy
(
ds
->
window
,
ss
->
window
,
ds
->
w_size
*
2
*
sizeof
(
Byte
));
zmemcpy
(
ds
->
prev
,
ss
->
prev
,
ds
->
w_size
*
sizeof
(
Pos
));
zmemcpy
(
(
voidpf
)
ds
->
prev
,
(
voidpf
)
ss
->
prev
,
ds
->
w_size
*
sizeof
(
Pos
));
zmemcpy
(
ds
->
head
,
ss
->
head
,
ds
->
hash_size
*
sizeof
(
Pos
));
zmemcpy
(
(
voidpf
)
ds
->
head
,
(
voidpf
)
ss
->
head
,
ds
->
hash_size
*
sizeof
(
Pos
));
zmemcpy
(
ds
->
pending_buf
,
ss
->
pending_buf
,
(
uInt
)
ds
->
pending_buf_size
);
zmemcpy
(
ds
->
pending_buf
,
ss
->
pending_buf
,
(
uInt
)
ds
->
pending_buf_size
);
ds
->
pending_out
=
ds
->
pending_buf
+
(
ss
->
pending_out
-
ss
->
pending_buf
);
ds
->
pending_out
=
ds
->
pending_buf
+
(
ss
->
pending_out
-
ss
->
pending_buf
);
...
@@ -1001,15 +1085,15 @@ local int read_buf(strm, buf, size)
...
@@ -1001,15 +1085,15 @@ local int read_buf(strm, buf, size)
strm
->
avail_in
-=
len
;
strm
->
avail_in
-=
len
;
zmemcpy
(
buf
,
strm
->
next_in
,
len
);
if
(
strm
->
state
->
wrap
==
1
)
{
if
(
strm
->
state
->
wrap
==
1
)
{
strm
->
adler
=
adler32
(
strm
->
adler
,
strm
->
next_in
,
len
);
strm
->
adler
=
adler32
(
strm
->
adler
,
buf
,
len
);
}
}
#ifdef GZIP
#ifdef GZIP
else
if
(
strm
->
state
->
wrap
==
2
)
{
else
if
(
strm
->
state
->
wrap
==
2
)
{
strm
->
adler
=
crc32
(
strm
->
adler
,
strm
->
next_in
,
len
);
strm
->
adler
=
crc32
(
strm
->
adler
,
buf
,
len
);
}
}
#endif
#endif
zmemcpy
(
buf
,
strm
->
next_in
,
len
);
strm
->
next_in
+=
len
;
strm
->
next_in
+=
len
;
strm
->
total_in
+=
len
;
strm
->
total_in
+=
len
;
...
@@ -1036,6 +1120,7 @@ local void lm_init (s)
...
@@ -1036,6 +1120,7 @@ local void lm_init (s)
s
->
strstart
=
0
;
s
->
strstart
=
0
;
s
->
block_start
=
0L
;
s
->
block_start
=
0L
;
s
->
lookahead
=
0
;
s
->
lookahead
=
0
;
s
->
insert
=
0
;
s
->
match_length
=
s
->
prev_length
=
MIN_MATCH
-
1
;
s
->
match_length
=
s
->
prev_length
=
MIN_MATCH
-
1
;
s
->
match_available
=
0
;
s
->
match_available
=
0
;
s
->
ins_h
=
0
;
s
->
ins_h
=
0
;
...
@@ -1310,6 +1395,8 @@ local void fill_window(s)
...
@@ -1310,6 +1395,8 @@ local void fill_window(s)
unsigned
more
;
/* Amount of free space at the end of the window. */
unsigned
more
;
/* Amount of free space at the end of the window. */
uInt
wsize
=
s
->
w_size
;
uInt
wsize
=
s
->
w_size
;
Assert
(
s
->
lookahead
<
MIN_LOOKAHEAD
,
"already enough lookahead"
);
do
{
do
{
more
=
(
unsigned
)(
s
->
window_size
-
(
ulg
)
s
->
lookahead
-
(
ulg
)
s
->
strstart
);
more
=
(
unsigned
)(
s
->
window_size
-
(
ulg
)
s
->
lookahead
-
(
ulg
)
s
->
strstart
);
...
@@ -1362,7 +1449,7 @@ local void fill_window(s)
...
@@ -1362,7 +1449,7 @@ local void fill_window(s)
#endif
#endif
more
+=
wsize
;
more
+=
wsize
;
}
}
if
(
s
->
strm
->
avail_in
==
0
)
return
;
if
(
s
->
strm
->
avail_in
==
0
)
break
;
/* If there was no sliding:
/* If there was no sliding:
* strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
* strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
...
@@ -1381,12 +1468,24 @@ local void fill_window(s)
...
@@ -1381,12 +1468,24 @@ local void fill_window(s)
s
->
lookahead
+=
n
;
s
->
lookahead
+=
n
;
/* Initialize the hash value now that we have some input: */
/* Initialize the hash value now that we have some input: */
if
(
s
->
lookahead
>=
MIN_MATCH
)
{
if
(
s
->
lookahead
+
s
->
insert
>=
MIN_MATCH
)
{
s
->
ins_h
=
s
->
window
[
s
->
strstart
];
uInt
str
=
s
->
strstart
-
s
->
insert
;
UPDATE_HASH
(
s
,
s
->
ins_h
,
s
->
window
[
s
->
strstart
+
1
]);
s
->
ins_h
=
s
->
window
[
str
];
UPDATE_HASH
(
s
,
s
->
ins_h
,
s
->
window
[
str
+
1
]);
#if MIN_MATCH != 3
#if MIN_MATCH != 3
Call
UPDATE_HASH
()
MIN_MATCH
-
3
more
times
Call
UPDATE_HASH
()
MIN_MATCH
-
3
more
times
#endif
#endif
while
(
s
->
insert
)
{
UPDATE_HASH
(
s
,
s
->
ins_h
,
s
->
window
[
str
+
MIN_MATCH
-
1
]);
#ifndef FASTEST
s
->
prev
[
str
&
s
->
w_mask
]
=
s
->
head
[
s
->
ins_h
];
#endif
s
->
head
[
s
->
ins_h
]
=
(
Pos
)
str
;
str
++
;
s
->
insert
--
;
if
(
s
->
lookahead
+
s
->
insert
<
MIN_MATCH
)
break
;
}
}
}
/* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
/* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
* but this is not important since only literal bytes will be emitted.
* but this is not important since only literal bytes will be emitted.
...
@@ -1427,6 +1526,9 @@ local void fill_window(s)
...
@@ -1427,6 +1526,9 @@ local void fill_window(s)
s
->
high_water
+=
init
;
s
->
high_water
+=
init
;
}
}
}
}
Assert
((
ulg
)
s
->
strstart
<=
s
->
window_size
-
MIN_LOOKAHEAD
,
"not enough room for search"
);
}
}
/* ===========================================================================
/* ===========================================================================
...
@@ -1506,8 +1608,14 @@ local block_state deflate_stored(s, flush)
...
@@ -1506,8 +1608,14 @@ local block_state deflate_stored(s, flush)
FLUSH_BLOCK
(
s
,
0
);
FLUSH_BLOCK
(
s
,
0
);
}
}
}
}
FLUSH_BLOCK
(
s
,
flush
==
Z_FINISH
);
s
->
insert
=
0
;
return
flush
==
Z_FINISH
?
finish_done
:
block_done
;
if
(
flush
==
Z_FINISH
)
{
FLUSH_BLOCK
(
s
,
1
);
return
finish_done
;
}
if
((
long
)
s
->
strstart
>
s
->
block_start
)
FLUSH_BLOCK
(
s
,
0
);
return
block_done
;
}
}
/* ===========================================================================
/* ===========================================================================
...
@@ -1603,8 +1711,14 @@ local block_state deflate_fast(s, flush)
...
@@ -1603,8 +1711,14 @@ local block_state deflate_fast(s, flush)
}
}
if
(
bflush
)
FLUSH_BLOCK
(
s
,
0
);
if
(
bflush
)
FLUSH_BLOCK
(
s
,
0
);
}
}
FLUSH_BLOCK
(
s
,
flush
==
Z_FINISH
);
s
->
insert
=
s
->
strstart
<
MIN_MATCH
-
1
?
s
->
strstart
:
MIN_MATCH
-
1
;
return
flush
==
Z_FINISH
?
finish_done
:
block_done
;
if
(
flush
==
Z_FINISH
)
{
FLUSH_BLOCK
(
s
,
1
);
return
finish_done
;
}
if
(
s
->
last_lit
)
FLUSH_BLOCK
(
s
,
0
);
return
block_done
;
}
}
#ifndef FASTEST
#ifndef FASTEST
...
@@ -1728,8 +1842,14 @@ local block_state deflate_slow(s, flush)
...
@@ -1728,8 +1842,14 @@ local block_state deflate_slow(s, flush)
_tr_tally_lit
(
s
,
s
->
window
[
s
->
strstart
-
1
],
bflush
);
_tr_tally_lit
(
s
,
s
->
window
[
s
->
strstart
-
1
],
bflush
);
s
->
match_available
=
0
;
s
->
match_available
=
0
;
}
}
FLUSH_BLOCK
(
s
,
flush
==
Z_FINISH
);
s
->
insert
=
s
->
strstart
<
MIN_MATCH
-
1
?
s
->
strstart
:
MIN_MATCH
-
1
;
return
flush
==
Z_FINISH
?
finish_done
:
block_done
;
if
(
flush
==
Z_FINISH
)
{
FLUSH_BLOCK
(
s
,
1
);
return
finish_done
;
}
if
(
s
->
last_lit
)
FLUSH_BLOCK
(
s
,
0
);
return
block_done
;
}
}
#endif
/* FASTEST */
#endif
/* FASTEST */
...
@@ -1749,11 +1869,11 @@ local block_state deflate_rle(s, flush)
...
@@ -1749,11 +1869,11 @@ local block_state deflate_rle(s, flush)
for
(;;)
{
for
(;;)
{
/* Make sure that we always have enough lookahead, except
/* Make sure that we always have enough lookahead, except
* at the end of the input file. We need MAX_MATCH bytes
* at the end of the input file. We need MAX_MATCH bytes
* for the longest
encodable run
.
* for the longest
run, plus one for the unrolled loop
.
*/
*/
if
(
s
->
lookahead
<
MAX_MATCH
)
{
if
(
s
->
lookahead
<
=
MAX_MATCH
)
{
fill_window
(
s
);
fill_window
(
s
);
if
(
s
->
lookahead
<
MAX_MATCH
&&
flush
==
Z_NO_FLUSH
)
{
if
(
s
->
lookahead
<
=
MAX_MATCH
&&
flush
==
Z_NO_FLUSH
)
{
return
need_more
;
return
need_more
;
}
}
if
(
s
->
lookahead
==
0
)
break
;
/* flush the current block */
if
(
s
->
lookahead
==
0
)
break
;
/* flush the current block */
...
@@ -1776,6 +1896,7 @@ local block_state deflate_rle(s, flush)
...
@@ -1776,6 +1896,7 @@ local block_state deflate_rle(s, flush)
if
(
s
->
match_length
>
s
->
lookahead
)
if
(
s
->
match_length
>
s
->
lookahead
)
s
->
match_length
=
s
->
lookahead
;
s
->
match_length
=
s
->
lookahead
;
}
}
Assert
(
scan
<=
s
->
window
+
(
uInt
)(
s
->
window_size
-
1
),
"wild scan"
);
}
}
/* Emit match if have run of MIN_MATCH or longer, else emit literal */
/* Emit match if have run of MIN_MATCH or longer, else emit literal */
...
@@ -1796,8 +1917,14 @@ local block_state deflate_rle(s, flush)
...
@@ -1796,8 +1917,14 @@ local block_state deflate_rle(s, flush)
}
}
if
(
bflush
)
FLUSH_BLOCK
(
s
,
0
);
if
(
bflush
)
FLUSH_BLOCK
(
s
,
0
);
}
}
FLUSH_BLOCK
(
s
,
flush
==
Z_FINISH
);
s
->
insert
=
0
;
return
flush
==
Z_FINISH
?
finish_done
:
block_done
;
if
(
flush
==
Z_FINISH
)
{
FLUSH_BLOCK
(
s
,
1
);
return
finish_done
;
}
if
(
s
->
last_lit
)
FLUSH_BLOCK
(
s
,
0
);
return
block_done
;
}
}
/* ===========================================================================
/* ===========================================================================
...
@@ -1829,6 +1956,12 @@ local block_state deflate_huff(s, flush)
...
@@ -1829,6 +1956,12 @@ local block_state deflate_huff(s, flush)
s
->
strstart
++
;
s
->
strstart
++
;
if
(
bflush
)
FLUSH_BLOCK
(
s
,
0
);
if
(
bflush
)
FLUSH_BLOCK
(
s
,
0
);
}
}
FLUSH_BLOCK
(
s
,
flush
==
Z_FINISH
);
s
->
insert
=
0
;
return
flush
==
Z_FINISH
?
finish_done
:
block_done
;
if
(
flush
==
Z_FINISH
)
{
FLUSH_BLOCK
(
s
,
1
);
return
finish_done
;
}
if
(
s
->
last_lit
)
FLUSH_BLOCK
(
s
,
0
);
return
block_done
;
}
}
deps/zlib/deflate.h
View file @
9b87998c
/* deflate.h -- internal compression state
/* deflate.h -- internal compression state
* Copyright (C) 1995-201
0
Jean-loup Gailly
* Copyright (C) 1995-201
2
Jean-loup Gailly
* For conditions of distribution and use, see copyright notice in zlib.h
* For conditions of distribution and use, see copyright notice in zlib.h
*/
*/
...
@@ -48,6 +48,9 @@
...
@@ -48,6 +48,9 @@
#define MAX_BITS 15
#define MAX_BITS 15
/* All codes must not exceed MAX_BITS bits */
/* All codes must not exceed MAX_BITS bits */
#define Buf_size 16
/* size of bit buffer in bi_buf */
#define INIT_STATE 42
#define INIT_STATE 42
#define EXTRA_STATE 69
#define EXTRA_STATE 69
#define NAME_STATE 73
#define NAME_STATE 73
...
@@ -101,7 +104,7 @@ typedef struct internal_state {
...
@@ -101,7 +104,7 @@ typedef struct internal_state {
int
wrap
;
/* bit 0 true for zlib, bit 1 true for gzip */
int
wrap
;
/* bit 0 true for zlib, bit 1 true for gzip */
gz_headerp
gzhead
;
/* gzip header information to write */
gz_headerp
gzhead
;
/* gzip header information to write */
uInt
gzindex
;
/* where in extra, name, or comment */
uInt
gzindex
;
/* where in extra, name, or comment */
Byte
method
;
/*
STORED (for zip only) or
DEFLATED */
Byte
method
;
/*
can only be
DEFLATED */
int
last_flush
;
/* value of flush param for previous deflate call */
int
last_flush
;
/* value of flush param for previous deflate call */
/* used by deflate.c: */
/* used by deflate.c: */
...
@@ -188,7 +191,7 @@ typedef struct internal_state {
...
@@ -188,7 +191,7 @@ typedef struct internal_state {
int
nice_match
;
/* Stop searching when current match exceeds this */
int
nice_match
;
/* Stop searching when current match exceeds this */
/* used by trees.c: */
/* used by trees.c: */
/* Didn't use ct_data typedef below to supress compiler warning */
/* Didn't use ct_data typedef below to sup
p
ress compiler warning */
struct
ct_data_s
dyn_ltree
[
HEAP_SIZE
];
/* literal and length tree */
struct
ct_data_s
dyn_ltree
[
HEAP_SIZE
];
/* literal and length tree */
struct
ct_data_s
dyn_dtree
[
2
*
D_CODES
+
1
];
/* distance tree */
struct
ct_data_s
dyn_dtree
[
2
*
D_CODES
+
1
];
/* distance tree */
struct
ct_data_s
bl_tree
[
2
*
BL_CODES
+
1
];
/* Huffman tree for bit lengths */
struct
ct_data_s
bl_tree
[
2
*
BL_CODES
+
1
];
/* Huffman tree for bit lengths */
...
@@ -244,7 +247,7 @@ typedef struct internal_state {
...
@@ -244,7 +247,7 @@ typedef struct internal_state {
ulg
opt_len
;
/* bit length of current block with optimal trees */
ulg
opt_len
;
/* bit length of current block with optimal trees */
ulg
static_len
;
/* bit length of current block with static trees */
ulg
static_len
;
/* bit length of current block with static trees */
uInt
matches
;
/* number of string matches in current block */
uInt
matches
;
/* number of string matches in current block */
int
last_eob_len
;
/* bit length of EOB code for last block
*/
uInt
insert
;
/* bytes at end of window left to insert
*/
#ifdef DEBUG
#ifdef DEBUG
ulg
compressed_len
;
/* total bit length of compressed file mod 2^32 */
ulg
compressed_len
;
/* total bit length of compressed file mod 2^32 */
...
@@ -294,6 +297,7 @@ void ZLIB_INTERNAL _tr_init OF((deflate_state *s));
...
@@ -294,6 +297,7 @@ void ZLIB_INTERNAL _tr_init OF((deflate_state *s));
int
ZLIB_INTERNAL
_tr_tally
OF
((
deflate_state
*
s
,
unsigned
dist
,
unsigned
lc
));
int
ZLIB_INTERNAL
_tr_tally
OF
((
deflate_state
*
s
,
unsigned
dist
,
unsigned
lc
));
void
ZLIB_INTERNAL
_tr_flush_block
OF
((
deflate_state
*
s
,
charf
*
buf
,
void
ZLIB_INTERNAL
_tr_flush_block
OF
((
deflate_state
*
s
,
charf
*
buf
,
ulg
stored_len
,
int
last
));
ulg
stored_len
,
int
last
));
void
ZLIB_INTERNAL
_tr_flush_bits
OF
((
deflate_state
*
s
));
void
ZLIB_INTERNAL
_tr_align
OF
((
deflate_state
*
s
));
void
ZLIB_INTERNAL
_tr_align
OF
((
deflate_state
*
s
));
void
ZLIB_INTERNAL
_tr_stored_block
OF
((
deflate_state
*
s
,
charf
*
buf
,
void
ZLIB_INTERNAL
_tr_stored_block
OF
((
deflate_state
*
s
,
charf
*
buf
,
ulg
stored_len
,
int
last
));
ulg
stored_len
,
int
last
));
...
...
deps/zlib/infback.c
0 → 100644
View file @
9b87998c
/* infback.c -- inflate using a call-back interface
* Copyright (C) 1995-2011 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/*
This code is largely copied from inflate.c. Normally either infback.o or
inflate.o would be linked into an application--not both. The interface
with inffast.c is retained so that optimized assembler-coded versions of
inflate_fast() can be used with either inflate.c or infback.c.
*/
#include "zutil.h"
#include "inftrees.h"
#include "inflate.h"
#include "inffast.h"
/* function prototypes */
local
void
fixedtables
OF
((
struct
inflate_state
FAR
*
state
));
/*
strm provides memory allocation functions in zalloc and zfree, or
Z_NULL to use the library memory allocation functions.
windowBits is in the range 8..15, and window is a user-supplied
window and output buffer that is 2**windowBits bytes.
*/
int
ZEXPORT
inflateBackInit_
(
strm
,
windowBits
,
window
,
version
,
stream_size
)
z_streamp
strm
;
int
windowBits
;
unsigned
char
FAR
*
window
;
const
char
*
version
;
int
stream_size
;
{
struct
inflate_state
FAR
*
state
;
if
(
version
==
Z_NULL
||
version
[
0
]
!=
ZLIB_VERSION
[
0
]
||
stream_size
!=
(
int
)(
sizeof
(
z_stream
)))
return
Z_VERSION_ERROR
;
if
(
strm
==
Z_NULL
||
window
==
Z_NULL
||
windowBits
<
8
||
windowBits
>
15
)
return
Z_STREAM_ERROR
;
strm
->
msg
=
Z_NULL
;
/* in case we return an error */
if
(
strm
->
zalloc
==
(
alloc_func
)
0
)
{
#ifdef Z_SOLO
return
Z_STREAM_ERROR
;
#else
strm
->
zalloc
=
zcalloc
;
strm
->
opaque
=
(
voidpf
)
0
;
#endif
}
if
(
strm
->
zfree
==
(
free_func
)
0
)
#ifdef Z_SOLO
return
Z_STREAM_ERROR
;
#else
strm
->
zfree
=
zcfree
;
#endif
state
=
(
struct
inflate_state
FAR
*
)
ZALLOC
(
strm
,
1
,
sizeof
(
struct
inflate_state
));
if
(
state
==
Z_NULL
)
return
Z_MEM_ERROR
;
Tracev
((
stderr
,
"inflate: allocated
\n
"
));
strm
->
state
=
(
struct
internal_state
FAR
*
)
state
;
state
->
dmax
=
32768U
;
state
->
wbits
=
windowBits
;
state
->
wsize
=
1U
<<
windowBits
;
state
->
window
=
window
;
state
->
wnext
=
0
;
state
->
whave
=
0
;
return
Z_OK
;
}
/*
Return state with length and distance decoding tables and index sizes set to
fixed code decoding. Normally this returns fixed tables from inffixed.h.
If BUILDFIXED is defined, then instead this routine builds the tables the
first time it's called, and returns those tables the first time and
thereafter. This reduces the size of the code by about 2K bytes, in
exchange for a little execution time. However, BUILDFIXED should not be
used for threaded applications, since the rewriting of the tables and virgin
may not be thread-safe.
*/
local
void
fixedtables
(
state
)
struct
inflate_state
FAR
*
state
;
{
#ifdef BUILDFIXED
static
int
virgin
=
1
;
static
code
*
lenfix
,
*
distfix
;
static
code
fixed
[
544
];
/* build fixed huffman tables if first call (may not be thread safe) */
if
(
virgin
)
{
unsigned
sym
,
bits
;
static
code
*
next
;
/* literal/length table */
sym
=
0
;
while
(
sym
<
144
)
state
->
lens
[
sym
++
]
=
8
;
while
(
sym
<
256
)
state
->
lens
[
sym
++
]
=
9
;
while
(
sym
<
280
)
state
->
lens
[
sym
++
]
=
7
;
while
(
sym
<
288
)
state
->
lens
[
sym
++
]
=
8
;
next
=
fixed
;
lenfix
=
next
;
bits
=
9
;
inflate_table
(
LENS
,
state
->
lens
,
288
,
&
(
next
),
&
(
bits
),
state
->
work
);
/* distance table */
sym
=
0
;
while
(
sym
<
32
)
state
->
lens
[
sym
++
]
=
5
;
distfix
=
next
;
bits
=
5
;
inflate_table
(
DISTS
,
state
->
lens
,
32
,
&
(
next
),
&
(
bits
),
state
->
work
);
/* do this just once */
virgin
=
0
;
}
#else
/* !BUILDFIXED */
# include "inffixed.h"
#endif
/* BUILDFIXED */
state
->
lencode
=
lenfix
;
state
->
lenbits
=
9
;
state
->
distcode
=
distfix
;
state
->
distbits
=
5
;
}
/* Macros for inflateBack(): */
/* Load returned state from inflate_fast() */
#define LOAD() \
do { \
put = strm->next_out; \
left = strm->avail_out; \
next = strm->next_in; \
have = strm->avail_in; \
hold = state->hold; \
bits = state->bits; \
} while (0)
/* Set state from registers for inflate_fast() */
#define RESTORE() \
do { \
strm->next_out = put; \
strm->avail_out = left; \
strm->next_in = next; \
strm->avail_in = have; \
state->hold = hold; \
state->bits = bits; \
} while (0)
/* Clear the input bit accumulator */
#define INITBITS() \
do { \
hold = 0; \
bits = 0; \
} while (0)
/* Assure that some input is available. If input is requested, but denied,
then return a Z_BUF_ERROR from inflateBack(). */
#define PULL() \
do { \
if (have == 0) { \
have = in(in_desc, &next); \
if (have == 0) { \
next = Z_NULL; \
ret = Z_BUF_ERROR; \
goto inf_leave; \
} \
} \
} while (0)
/* Get a byte of input into the bit accumulator, or return from inflateBack()
with an error if there is no input available. */
#define PULLBYTE() \
do { \
PULL(); \
have--; \
hold += (unsigned long)(*next++) << bits; \
bits += 8; \
} while (0)
/* Assure that there are at least n bits in the bit accumulator. If there is
not enough available input to do that, then return from inflateBack() with
an error. */
#define NEEDBITS(n) \
do { \
while (bits < (unsigned)(n)) \
PULLBYTE(); \
} while (0)
/* Return the low n bits of the bit accumulator (n < 16) */
#define BITS(n) \
((unsigned)hold & ((1U << (n)) - 1))
/* Remove n bits from the bit accumulator */
#define DROPBITS(n) \
do { \
hold >>= (n); \
bits -= (unsigned)(n); \
} while (0)
/* Remove zero to seven bits as needed to go to a byte boundary */
#define BYTEBITS() \
do { \
hold >>= bits & 7; \
bits -= bits & 7; \
} while (0)
/* Assure that some output space is available, by writing out the window
if it's full. If the write fails, return from inflateBack() with a
Z_BUF_ERROR. */
#define ROOM() \
do { \
if (left == 0) { \
put = state->window; \
left = state->wsize; \
state->whave = left; \
if (out(out_desc, put, left)) { \
ret = Z_BUF_ERROR; \
goto inf_leave; \
} \
} \
} while (0)
/*
strm provides the memory allocation functions and window buffer on input,
and provides information on the unused input on return. For Z_DATA_ERROR
returns, strm will also provide an error message.
in() and out() are the call-back input and output functions. When
inflateBack() needs more input, it calls in(). When inflateBack() has
filled the window with output, or when it completes with data in the
window, it calls out() to write out the data. The application must not
change the provided input until in() is called again or inflateBack()
returns. The application must not change the window/output buffer until
inflateBack() returns.
in() and out() are called with a descriptor parameter provided in the
inflateBack() call. This parameter can be a structure that provides the
information required to do the read or write, as well as accumulated
information on the input and output such as totals and check values.
in() should return zero on failure. out() should return non-zero on
failure. If either in() or out() fails, than inflateBack() returns a
Z_BUF_ERROR. strm->next_in can be checked for Z_NULL to see whether it
was in() or out() that caused in the error. Otherwise, inflateBack()
returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format
error, or Z_MEM_ERROR if it could not allocate memory for the state.
inflateBack() can also return Z_STREAM_ERROR if the input parameters
are not correct, i.e. strm is Z_NULL or the state was not initialized.
*/
int
ZEXPORT
inflateBack
(
strm
,
in
,
in_desc
,
out
,
out_desc
)
z_streamp
strm
;
in_func
in
;
void
FAR
*
in_desc
;
out_func
out
;
void
FAR
*
out_desc
;
{
struct
inflate_state
FAR
*
state
;
z_const
unsigned
char
FAR
*
next
;
/* next input */
unsigned
char
FAR
*
put
;
/* next output */
unsigned
have
,
left
;
/* available input and output */
unsigned
long
hold
;
/* bit buffer */
unsigned
bits
;
/* bits in bit buffer */
unsigned
copy
;
/* number of stored or match bytes to copy */
unsigned
char
FAR
*
from
;
/* where to copy match bytes from */
code
here
;
/* current decoding table entry */
code
last
;
/* parent table entry */
unsigned
len
;
/* length to copy for repeats, bits to drop */
int
ret
;
/* return code */
static
const
unsigned
short
order
[
19
]
=
/* permutation of code lengths */
{
16
,
17
,
18
,
0
,
8
,
7
,
9
,
6
,
10
,
5
,
11
,
4
,
12
,
3
,
13
,
2
,
14
,
1
,
15
};
/* Check that the strm exists and that the state was initialized */
if
(
strm
==
Z_NULL
||
strm
->
state
==
Z_NULL
)
return
Z_STREAM_ERROR
;
state
=
(
struct
inflate_state
FAR
*
)
strm
->
state
;
/* Reset the state */
strm
->
msg
=
Z_NULL
;
state
->
mode
=
TYPE
;
state
->
last
=
0
;
state
->
whave
=
0
;
next
=
strm
->
next_in
;
have
=
next
!=
Z_NULL
?
strm
->
avail_in
:
0
;
hold
=
0
;
bits
=
0
;
put
=
state
->
window
;
left
=
state
->
wsize
;
/* Inflate until end of block marked as last */
for
(;;)
switch
(
state
->
mode
)
{
case
TYPE
:
/* determine and dispatch block type */
if
(
state
->
last
)
{
BYTEBITS
();
state
->
mode
=
DONE
;
break
;
}
NEEDBITS
(
3
);
state
->
last
=
BITS
(
1
);
DROPBITS
(
1
);
switch
(
BITS
(
2
))
{
case
0
:
/* stored block */
Tracev
((
stderr
,
"inflate: stored block%s
\n
"
,
state
->
last
?
" (last)"
:
""
));
state
->
mode
=
STORED
;
break
;
case
1
:
/* fixed block */
fixedtables
(
state
);
Tracev
((
stderr
,
"inflate: fixed codes block%s
\n
"
,
state
->
last
?
" (last)"
:
""
));
state
->
mode
=
LEN
;
/* decode codes */
break
;
case
2
:
/* dynamic block */
Tracev
((
stderr
,
"inflate: dynamic codes block%s
\n
"
,
state
->
last
?
" (last)"
:
""
));
state
->
mode
=
TABLE
;
break
;
case
3
:
strm
->
msg
=
(
char
*
)
"invalid block type"
;
state
->
mode
=
BAD
;
}
DROPBITS
(
2
);
break
;
case
STORED
:
/* get and verify stored block length */
BYTEBITS
();
/* go to byte boundary */
NEEDBITS
(
32
);
if
((
hold
&
0xffff
)
!=
((
hold
>>
16
)
^
0xffff
))
{
strm
->
msg
=
(
char
*
)
"invalid stored block lengths"
;
state
->
mode
=
BAD
;
break
;
}
state
->
length
=
(
unsigned
)
hold
&
0xffff
;
Tracev
((
stderr
,
"inflate: stored length %u
\n
"
,
state
->
length
));
INITBITS
();
/* copy stored block from input to output */
while
(
state
->
length
!=
0
)
{
copy
=
state
->
length
;
PULL
();
ROOM
();
if
(
copy
>
have
)
copy
=
have
;
if
(
copy
>
left
)
copy
=
left
;
zmemcpy
(
put
,
next
,
copy
);
have
-=
copy
;
next
+=
copy
;
left
-=
copy
;
put
+=
copy
;
state
->
length
-=
copy
;
}
Tracev
((
stderr
,
"inflate: stored end
\n
"
));
state
->
mode
=
TYPE
;
break
;
case
TABLE
:
/* get dynamic table entries descriptor */
NEEDBITS
(
14
);
state
->
nlen
=
BITS
(
5
)
+
257
;
DROPBITS
(
5
);
state
->
ndist
=
BITS
(
5
)
+
1
;
DROPBITS
(
5
);
state
->
ncode
=
BITS
(
4
)
+
4
;
DROPBITS
(
4
);
#ifndef PKZIP_BUG_WORKAROUND
if
(
state
->
nlen
>
286
||
state
->
ndist
>
30
)
{
strm
->
msg
=
(
char
*
)
"too many length or distance symbols"
;
state
->
mode
=
BAD
;
break
;
}
#endif
Tracev
((
stderr
,
"inflate: table sizes ok
\n
"
));
/* get code length code lengths (not a typo) */
state
->
have
=
0
;
while
(
state
->
have
<
state
->
ncode
)
{
NEEDBITS
(
3
);
state
->
lens
[
order
[
state
->
have
++
]]
=
(
unsigned
short
)
BITS
(
3
);
DROPBITS
(
3
);
}
while
(
state
->
have
<
19
)
state
->
lens
[
order
[
state
->
have
++
]]
=
0
;
state
->
next
=
state
->
codes
;
state
->
lencode
=
(
code
const
FAR
*
)(
state
->
next
);
state
->
lenbits
=
7
;
ret
=
inflate_table
(
CODES
,
state
->
lens
,
19
,
&
(
state
->
next
),
&
(
state
->
lenbits
),
state
->
work
);
if
(
ret
)
{
strm
->
msg
=
(
char
*
)
"invalid code lengths set"
;
state
->
mode
=
BAD
;
break
;
}
Tracev
((
stderr
,
"inflate: code lengths ok
\n
"
));
/* get length and distance code code lengths */
state
->
have
=
0
;
while
(
state
->
have
<
state
->
nlen
+
state
->
ndist
)
{
for
(;;)
{
here
=
state
->
lencode
[
BITS
(
state
->
lenbits
)];
if
((
unsigned
)(
here
.
bits
)
<=
bits
)
break
;
PULLBYTE
();
}
if
(
here
.
val
<
16
)
{
DROPBITS
(
here
.
bits
);
state
->
lens
[
state
->
have
++
]
=
here
.
val
;
}
else
{
if
(
here
.
val
==
16
)
{
NEEDBITS
(
here
.
bits
+
2
);
DROPBITS
(
here
.
bits
);
if
(
state
->
have
==
0
)
{
strm
->
msg
=
(
char
*
)
"invalid bit length repeat"
;
state
->
mode
=
BAD
;
break
;
}
len
=
(
unsigned
)(
state
->
lens
[
state
->
have
-
1
]);
copy
=
3
+
BITS
(
2
);
DROPBITS
(
2
);
}
else
if
(
here
.
val
==
17
)
{
NEEDBITS
(
here
.
bits
+
3
);
DROPBITS
(
here
.
bits
);
len
=
0
;
copy
=
3
+
BITS
(
3
);
DROPBITS
(
3
);
}
else
{
NEEDBITS
(
here
.
bits
+
7
);
DROPBITS
(
here
.
bits
);
len
=
0
;
copy
=
11
+
BITS
(
7
);
DROPBITS
(
7
);
}
if
(
state
->
have
+
copy
>
state
->
nlen
+
state
->
ndist
)
{
strm
->
msg
=
(
char
*
)
"invalid bit length repeat"
;
state
->
mode
=
BAD
;
break
;
}
while
(
copy
--
)
state
->
lens
[
state
->
have
++
]
=
(
unsigned
short
)
len
;
}
}
/* handle error breaks in while */
if
(
state
->
mode
==
BAD
)
break
;
/* check for end-of-block code (better have one) */
if
(
state
->
lens
[
256
]
==
0
)
{
strm
->
msg
=
(
char
*
)
"invalid code -- missing end-of-block"
;
state
->
mode
=
BAD
;
break
;
}
/* build code tables -- note: do not change the lenbits or distbits
values here (9 and 6) without reading the comments in inftrees.h
concerning the ENOUGH constants, which depend on those values */
state
->
next
=
state
->
codes
;
state
->
lencode
=
(
code
const
FAR
*
)(
state
->
next
);
state
->
lenbits
=
9
;
ret
=
inflate_table
(
LENS
,
state
->
lens
,
state
->
nlen
,
&
(
state
->
next
),
&
(
state
->
lenbits
),
state
->
work
);
if
(
ret
)
{
strm
->
msg
=
(
char
*
)
"invalid literal/lengths set"
;
state
->
mode
=
BAD
;
break
;
}
state
->
distcode
=
(
code
const
FAR
*
)(
state
->
next
);
state
->
distbits
=
6
;
ret
=
inflate_table
(
DISTS
,
state
->
lens
+
state
->
nlen
,
state
->
ndist
,
&
(
state
->
next
),
&
(
state
->
distbits
),
state
->
work
);
if
(
ret
)
{
strm
->
msg
=
(
char
*
)
"invalid distances set"
;
state
->
mode
=
BAD
;
break
;
}
Tracev
((
stderr
,
"inflate: codes ok
\n
"
));
state
->
mode
=
LEN
;
case
LEN
:
/* use inflate_fast() if we have enough input and output */
if
(
have
>=
6
&&
left
>=
258
)
{
RESTORE
();
if
(
state
->
whave
<
state
->
wsize
)
state
->
whave
=
state
->
wsize
-
left
;
inflate_fast
(
strm
,
state
->
wsize
);
LOAD
();
break
;
}
/* get a literal, length, or end-of-block code */
for
(;;)
{
here
=
state
->
lencode
[
BITS
(
state
->
lenbits
)];
if
((
unsigned
)(
here
.
bits
)
<=
bits
)
break
;
PULLBYTE
();
}
if
(
here
.
op
&&
(
here
.
op
&
0xf0
)
==
0
)
{
last
=
here
;
for
(;;)
{
here
=
state
->
lencode
[
last
.
val
+
(
BITS
(
last
.
bits
+
last
.
op
)
>>
last
.
bits
)];
if
((
unsigned
)(
last
.
bits
+
here
.
bits
)
<=
bits
)
break
;
PULLBYTE
();
}
DROPBITS
(
last
.
bits
);
}
DROPBITS
(
here
.
bits
);
state
->
length
=
(
unsigned
)
here
.
val
;
/* process literal */
if
(
here
.
op
==
0
)
{
Tracevv
((
stderr
,
here
.
val
>=
0x20
&&
here
.
val
<
0x7f
?
"inflate: literal '%c'
\n
"
:
"inflate: literal 0x%02x
\n
"
,
here
.
val
));
ROOM
();
*
put
++
=
(
unsigned
char
)(
state
->
length
);
left
--
;
state
->
mode
=
LEN
;
break
;
}
/* process end of block */
if
(
here
.
op
&
32
)
{
Tracevv
((
stderr
,
"inflate: end of block
\n
"
));
state
->
mode
=
TYPE
;
break
;
}
/* invalid code */
if
(
here
.
op
&
64
)
{
strm
->
msg
=
(
char
*
)
"invalid literal/length code"
;
state
->
mode
=
BAD
;
break
;
}
/* length code -- get extra bits, if any */
state
->
extra
=
(
unsigned
)(
here
.
op
)
&
15
;
if
(
state
->
extra
!=
0
)
{
NEEDBITS
(
state
->
extra
);
state
->
length
+=
BITS
(
state
->
extra
);
DROPBITS
(
state
->
extra
);
}
Tracevv
((
stderr
,
"inflate: length %u
\n
"
,
state
->
length
));
/* get distance code */
for
(;;)
{
here
=
state
->
distcode
[
BITS
(
state
->
distbits
)];
if
((
unsigned
)(
here
.
bits
)
<=
bits
)
break
;
PULLBYTE
();
}
if
((
here
.
op
&
0xf0
)
==
0
)
{
last
=
here
;
for
(;;)
{
here
=
state
->
distcode
[
last
.
val
+
(
BITS
(
last
.
bits
+
last
.
op
)
>>
last
.
bits
)];
if
((
unsigned
)(
last
.
bits
+
here
.
bits
)
<=
bits
)
break
;
PULLBYTE
();
}
DROPBITS
(
last
.
bits
);
}
DROPBITS
(
here
.
bits
);
if
(
here
.
op
&
64
)
{
strm
->
msg
=
(
char
*
)
"invalid distance code"
;
state
->
mode
=
BAD
;
break
;
}
state
->
offset
=
(
unsigned
)
here
.
val
;
/* get distance extra bits, if any */
state
->
extra
=
(
unsigned
)(
here
.
op
)
&
15
;
if
(
state
->
extra
!=
0
)
{
NEEDBITS
(
state
->
extra
);
state
->
offset
+=
BITS
(
state
->
extra
);
DROPBITS
(
state
->
extra
);
}
if
(
state
->
offset
>
state
->
wsize
-
(
state
->
whave
<
state
->
wsize
?
left
:
0
))
{
strm
->
msg
=
(
char
*
)
"invalid distance too far back"
;
state
->
mode
=
BAD
;
break
;
}
Tracevv
((
stderr
,
"inflate: distance %u
\n
"
,
state
->
offset
));
/* copy match from window to output */
do
{
ROOM
();
copy
=
state
->
wsize
-
state
->
offset
;
if
(
copy
<
left
)
{
from
=
put
+
copy
;
copy
=
left
-
copy
;
}
else
{
from
=
put
-
state
->
offset
;
copy
=
left
;
}
if
(
copy
>
state
->
length
)
copy
=
state
->
length
;
state
->
length
-=
copy
;
left
-=
copy
;
do
{
*
put
++
=
*
from
++
;
}
while
(
--
copy
);
}
while
(
state
->
length
!=
0
);
break
;
case
DONE
:
/* inflate stream terminated properly -- write leftover output */
ret
=
Z_STREAM_END
;
if
(
left
<
state
->
wsize
)
{
if
(
out
(
out_desc
,
state
->
window
,
state
->
wsize
-
left
))
ret
=
Z_BUF_ERROR
;
}
goto
inf_leave
;
case
BAD
:
ret
=
Z_DATA_ERROR
;
goto
inf_leave
;
default
:
/* can't happen, but makes compilers happy */
ret
=
Z_STREAM_ERROR
;
goto
inf_leave
;
}
/* Return unused input */
inf_leave
:
strm
->
next_in
=
next
;
strm
->
avail_in
=
have
;
return
ret
;
}
int
ZEXPORT
inflateBackEnd
(
strm
)
z_streamp
strm
;
{
if
(
strm
==
Z_NULL
||
strm
->
state
==
Z_NULL
||
strm
->
zfree
==
(
free_func
)
0
)
return
Z_STREAM_ERROR
;
ZFREE
(
strm
,
strm
->
state
);
strm
->
state
=
Z_NULL
;
Tracev
((
stderr
,
"inflate: end
\n
"
));
return
Z_OK
;
}
deps/zlib/inffast.c
View file @
9b87998c
/* inffast.c -- fast decoding
/* inffast.c -- fast decoding
* Copyright (C) 1995-2008, 2010 Mark Adler
* Copyright (C) 1995-2008, 2010
, 2013
Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
* For conditions of distribution and use, see copyright notice in zlib.h
*/
*/
...
@@ -69,8 +69,8 @@ z_streamp strm;
...
@@ -69,8 +69,8 @@ z_streamp strm;
unsigned
start
;
/* inflate()'s starting value for strm->avail_out */
unsigned
start
;
/* inflate()'s starting value for strm->avail_out */
{
{
struct
inflate_state
FAR
*
state
;
struct
inflate_state
FAR
*
state
;
unsigned
char
FAR
*
in
;
/* local strm->next_in */
z_const
unsigned
char
FAR
*
in
;
/* local strm->next_in */
unsigned
char
FAR
*
last
;
/* while in < last, enough input available
*/
z_const
unsigned
char
FAR
*
last
;
/* have enough input while in < last
*/
unsigned
char
FAR
*
out
;
/* local strm->next_out */
unsigned
char
FAR
*
out
;
/* local strm->next_out */
unsigned
char
FAR
*
beg
;
/* inflate()'s initial strm->next_out */
unsigned
char
FAR
*
beg
;
/* inflate()'s initial strm->next_out */
unsigned
char
FAR
*
end
;
/* while out < end, enough space available */
unsigned
char
FAR
*
end
;
/* while out < end, enough space available */
...
...
deps/zlib/inffixed.h
View file @
9b87998c
...
@@ -2,9 +2,9 @@
...
@@ -2,9 +2,9 @@
* Generated automatically by makefixed().
* Generated automatically by makefixed().
*/
*/
/* WARNING: this file should *not* be used by applications.
It
/* WARNING: this file should *not* be used by applications.
is part of the implementation of the compression library and
It is part of the implementation of this library and is
is
subject to change. Applications should only use zlib.h.
subject to change. Applications should only use zlib.h.
*/
*/
static
const
code
lenfix
[
512
]
=
{
static
const
code
lenfix
[
512
]
=
{
...
...
deps/zlib/inflate.c
View file @
9b87998c
/* inflate.c -- zlib decompression
/* inflate.c -- zlib decompression
* Copyright (C) 1995-201
0
Mark Adler
* Copyright (C) 1995-201
2
Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
* For conditions of distribution and use, see copyright notice in zlib.h
*/
*/
...
@@ -93,14 +93,15 @@
...
@@ -93,14 +93,15 @@
/* function prototypes */
/* function prototypes */
local
void
fixedtables
OF
((
struct
inflate_state
FAR
*
state
));
local
void
fixedtables
OF
((
struct
inflate_state
FAR
*
state
));
local
int
updatewindow
OF
((
z_streamp
strm
,
unsigned
out
));
local
int
updatewindow
OF
((
z_streamp
strm
,
const
unsigned
char
FAR
*
end
,
unsigned
copy
));
#ifdef BUILDFIXED
#ifdef BUILDFIXED
void
makefixed
OF
((
void
));
void
makefixed
OF
((
void
));
#endif
#endif
local
unsigned
syncsearch
OF
((
unsigned
FAR
*
have
,
unsigned
char
FAR
*
buf
,
local
unsigned
syncsearch
OF
((
unsigned
FAR
*
have
,
const
unsigned
char
FAR
*
buf
,
unsigned
len
));
unsigned
len
));
int
ZEXPORT
inflateReset
(
strm
)
int
ZEXPORT
inflateReset
Keep
(
strm
)
z_streamp
strm
;
z_streamp
strm
;
{
{
struct
inflate_state
FAR
*
state
;
struct
inflate_state
FAR
*
state
;
...
@@ -109,15 +110,13 @@ z_streamp strm;
...
@@ -109,15 +110,13 @@ z_streamp strm;
state
=
(
struct
inflate_state
FAR
*
)
strm
->
state
;
state
=
(
struct
inflate_state
FAR
*
)
strm
->
state
;
strm
->
total_in
=
strm
->
total_out
=
state
->
total
=
0
;
strm
->
total_in
=
strm
->
total_out
=
state
->
total
=
0
;
strm
->
msg
=
Z_NULL
;
strm
->
msg
=
Z_NULL
;
strm
->
adler
=
1
;
/* to support ill-conceived Java test suite */
if
(
state
->
wrap
)
/* to support ill-conceived Java test suite */
strm
->
adler
=
state
->
wrap
&
1
;
state
->
mode
=
HEAD
;
state
->
mode
=
HEAD
;
state
->
last
=
0
;
state
->
last
=
0
;
state
->
havedict
=
0
;
state
->
havedict
=
0
;
state
->
dmax
=
32768U
;
state
->
dmax
=
32768U
;
state
->
head
=
Z_NULL
;
state
->
head
=
Z_NULL
;
state
->
wsize
=
0
;
state
->
whave
=
0
;
state
->
wnext
=
0
;
state
->
hold
=
0
;
state
->
hold
=
0
;
state
->
bits
=
0
;
state
->
bits
=
0
;
state
->
lencode
=
state
->
distcode
=
state
->
next
=
state
->
codes
;
state
->
lencode
=
state
->
distcode
=
state
->
next
=
state
->
codes
;
...
@@ -127,6 +126,19 @@ z_streamp strm;
...
@@ -127,6 +126,19 @@ z_streamp strm;
return
Z_OK
;
return
Z_OK
;
}
}
int
ZEXPORT
inflateReset
(
strm
)
z_streamp
strm
;
{
struct
inflate_state
FAR
*
state
;
if
(
strm
==
Z_NULL
||
strm
->
state
==
Z_NULL
)
return
Z_STREAM_ERROR
;
state
=
(
struct
inflate_state
FAR
*
)
strm
->
state
;
state
->
wsize
=
0
;
state
->
whave
=
0
;
state
->
wnext
=
0
;
return
inflateResetKeep
(
strm
);
}
int
ZEXPORT
inflateReset2
(
strm
,
windowBits
)
int
ZEXPORT
inflateReset2
(
strm
,
windowBits
)
z_streamp
strm
;
z_streamp
strm
;
int
windowBits
;
int
windowBits
;
...
@@ -180,10 +192,19 @@ int stream_size;
...
@@ -180,10 +192,19 @@ int stream_size;
if
(
strm
==
Z_NULL
)
return
Z_STREAM_ERROR
;
if
(
strm
==
Z_NULL
)
return
Z_STREAM_ERROR
;
strm
->
msg
=
Z_NULL
;
/* in case we return an error */
strm
->
msg
=
Z_NULL
;
/* in case we return an error */
if
(
strm
->
zalloc
==
(
alloc_func
)
0
)
{
if
(
strm
->
zalloc
==
(
alloc_func
)
0
)
{
#ifdef Z_SOLO
return
Z_STREAM_ERROR
;
#else
strm
->
zalloc
=
zcalloc
;
strm
->
zalloc
=
zcalloc
;
strm
->
opaque
=
(
voidpf
)
0
;
strm
->
opaque
=
(
voidpf
)
0
;
#endif
}
}
if
(
strm
->
zfree
==
(
free_func
)
0
)
strm
->
zfree
=
zcfree
;
if
(
strm
->
zfree
==
(
free_func
)
0
)
#ifdef Z_SOLO
return
Z_STREAM_ERROR
;
#else
strm
->
zfree
=
zcfree
;
#endif
state
=
(
struct
inflate_state
FAR
*
)
state
=
(
struct
inflate_state
FAR
*
)
ZALLOC
(
strm
,
1
,
sizeof
(
struct
inflate_state
));
ZALLOC
(
strm
,
1
,
sizeof
(
struct
inflate_state
));
if
(
state
==
Z_NULL
)
return
Z_MEM_ERROR
;
if
(
state
==
Z_NULL
)
return
Z_MEM_ERROR
;
...
@@ -321,8 +342,8 @@ void makefixed()
...
@@ -321,8 +342,8 @@ void makefixed()
low
=
0
;
low
=
0
;
for
(;;)
{
for
(;;)
{
if
((
low
%
7
)
==
0
)
printf
(
"
\n
"
);
if
((
low
%
7
)
==
0
)
printf
(
"
\n
"
);
printf
(
"{%u,%u,%d}"
,
state
.
lencode
[
low
].
op
,
state
.
lencode
[
low
].
bits
,
printf
(
"{%u,%u,%d}"
,
(
low
&
127
)
==
99
?
64
:
state
.
lencode
[
low
].
op
,
state
.
lencode
[
low
].
val
);
state
.
lencode
[
low
].
bits
,
state
.
lencode
[
low
].
val
);
if
(
++
low
==
size
)
break
;
if
(
++
low
==
size
)
break
;
putchar
(
','
);
putchar
(
','
);
}
}
...
@@ -355,12 +376,13 @@ void makefixed()
...
@@ -355,12 +376,13 @@ void makefixed()
output will fall in the output data, making match copies simpler and faster.
output will fall in the output data, making match copies simpler and faster.
The advantage may be dependent on the size of the processor's data caches.
The advantage may be dependent on the size of the processor's data caches.
*/
*/
local
int
updatewindow
(
strm
,
out
)
local
int
updatewindow
(
strm
,
end
,
copy
)
z_streamp
strm
;
z_streamp
strm
;
unsigned
out
;
const
Bytef
*
end
;
unsigned
copy
;
{
{
struct
inflate_state
FAR
*
state
;
struct
inflate_state
FAR
*
state
;
unsigned
copy
,
dist
;
unsigned
dist
;
state
=
(
struct
inflate_state
FAR
*
)
strm
->
state
;
state
=
(
struct
inflate_state
FAR
*
)
strm
->
state
;
...
@@ -380,19 +402,18 @@ unsigned out;
...
@@ -380,19 +402,18 @@ unsigned out;
}
}
/* copy state->wsize or less output bytes into the circular window */
/* copy state->wsize or less output bytes into the circular window */
copy
=
out
-
strm
->
avail_out
;
if
(
copy
>=
state
->
wsize
)
{
if
(
copy
>=
state
->
wsize
)
{
zmemcpy
(
state
->
window
,
strm
->
next_out
-
state
->
wsize
,
state
->
wsize
);
zmemcpy
(
state
->
window
,
end
-
state
->
wsize
,
state
->
wsize
);
state
->
wnext
=
0
;
state
->
wnext
=
0
;
state
->
whave
=
state
->
wsize
;
state
->
whave
=
state
->
wsize
;
}
}
else
{
else
{
dist
=
state
->
wsize
-
state
->
wnext
;
dist
=
state
->
wsize
-
state
->
wnext
;
if
(
dist
>
copy
)
dist
=
copy
;
if
(
dist
>
copy
)
dist
=
copy
;
zmemcpy
(
state
->
window
+
state
->
wnext
,
strm
->
next_out
-
copy
,
dist
);
zmemcpy
(
state
->
window
+
state
->
wnext
,
end
-
copy
,
dist
);
copy
-=
dist
;
copy
-=
dist
;
if
(
copy
)
{
if
(
copy
)
{
zmemcpy
(
state
->
window
,
strm
->
next_out
-
copy
,
copy
);
zmemcpy
(
state
->
window
,
end
-
copy
,
copy
);
state
->
wnext
=
copy
;
state
->
wnext
=
copy
;
state
->
whave
=
state
->
wsize
;
state
->
whave
=
state
->
wsize
;
}
}
...
@@ -499,11 +520,6 @@ unsigned out;
...
@@ -499,11 +520,6 @@ unsigned out;
bits -= bits & 7; \
bits -= bits & 7; \
} while (0)
} while (0)
/* Reverse the bytes in a 32-bit value */
#define REVERSE(q) \
((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
(((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
/*
/*
inflate() uses a state machine to process as much input data and generate as
inflate() uses a state machine to process as much input data and generate as
much output data as possible before returning. The state machine is
much output data as possible before returning. The state machine is
...
@@ -591,7 +607,7 @@ z_streamp strm;
...
@@ -591,7 +607,7 @@ z_streamp strm;
int
flush
;
int
flush
;
{
{
struct
inflate_state
FAR
*
state
;
struct
inflate_state
FAR
*
state
;
unsigned
char
FAR
*
next
;
/* next input */
z_const
unsigned
char
FAR
*
next
;
/* next input */
unsigned
char
FAR
*
put
;
/* next output */
unsigned
char
FAR
*
put
;
/* next output */
unsigned
have
,
left
;
/* available input and output */
unsigned
have
,
left
;
/* available input and output */
unsigned
long
hold
;
/* bit buffer */
unsigned
long
hold
;
/* bit buffer */
...
@@ -797,7 +813,7 @@ int flush;
...
@@ -797,7 +813,7 @@ int flush;
#endif
#endif
case
DICTID
:
case
DICTID
:
NEEDBITS
(
32
);
NEEDBITS
(
32
);
strm
->
adler
=
state
->
check
=
REVERSE
(
hold
);
strm
->
adler
=
state
->
check
=
ZSWAP32
(
hold
);
INITBITS
();
INITBITS
();
state
->
mode
=
DICT
;
state
->
mode
=
DICT
;
case
DICT
:
case
DICT
:
...
@@ -905,7 +921,7 @@ int flush;
...
@@ -905,7 +921,7 @@ int flush;
while
(
state
->
have
<
19
)
while
(
state
->
have
<
19
)
state
->
lens
[
order
[
state
->
have
++
]]
=
0
;
state
->
lens
[
order
[
state
->
have
++
]]
=
0
;
state
->
next
=
state
->
codes
;
state
->
next
=
state
->
codes
;
state
->
lencode
=
(
co
de
const
FAR
*
)(
state
->
next
);
state
->
lencode
=
(
co
nst
code
FAR
*
)(
state
->
next
);
state
->
lenbits
=
7
;
state
->
lenbits
=
7
;
ret
=
inflate_table
(
CODES
,
state
->
lens
,
19
,
&
(
state
->
next
),
ret
=
inflate_table
(
CODES
,
state
->
lens
,
19
,
&
(
state
->
next
),
&
(
state
->
lenbits
),
state
->
work
);
&
(
state
->
lenbits
),
state
->
work
);
...
@@ -925,7 +941,6 @@ int flush;
...
@@ -925,7 +941,6 @@ int flush;
PULLBYTE
();
PULLBYTE
();
}
}
if
(
here
.
val
<
16
)
{
if
(
here
.
val
<
16
)
{
NEEDBITS
(
here
.
bits
);
DROPBITS
(
here
.
bits
);
DROPBITS
(
here
.
bits
);
state
->
lens
[
state
->
have
++
]
=
here
.
val
;
state
->
lens
[
state
->
have
++
]
=
here
.
val
;
}
}
...
@@ -980,7 +995,7 @@ int flush;
...
@@ -980,7 +995,7 @@ int flush;
values here (9 and 6) without reading the comments in inftrees.h
values here (9 and 6) without reading the comments in inftrees.h
concerning the ENOUGH constants, which depend on those values */
concerning the ENOUGH constants, which depend on those values */
state
->
next
=
state
->
codes
;
state
->
next
=
state
->
codes
;
state
->
lencode
=
(
co
de
const
FAR
*
)(
state
->
next
);
state
->
lencode
=
(
co
nst
code
FAR
*
)(
state
->
next
);
state
->
lenbits
=
9
;
state
->
lenbits
=
9
;
ret
=
inflate_table
(
LENS
,
state
->
lens
,
state
->
nlen
,
&
(
state
->
next
),
ret
=
inflate_table
(
LENS
,
state
->
lens
,
state
->
nlen
,
&
(
state
->
next
),
&
(
state
->
lenbits
),
state
->
work
);
&
(
state
->
lenbits
),
state
->
work
);
...
@@ -989,7 +1004,7 @@ int flush;
...
@@ -989,7 +1004,7 @@ int flush;
state
->
mode
=
BAD
;
state
->
mode
=
BAD
;
break
;
break
;
}
}
state
->
distcode
=
(
co
de
const
FAR
*
)(
state
->
next
);
state
->
distcode
=
(
co
nst
code
FAR
*
)(
state
->
next
);
state
->
distbits
=
6
;
state
->
distbits
=
6
;
ret
=
inflate_table
(
DISTS
,
state
->
lens
+
state
->
nlen
,
state
->
ndist
,
ret
=
inflate_table
(
DISTS
,
state
->
lens
+
state
->
nlen
,
state
->
ndist
,
&
(
state
->
next
),
&
(
state
->
distbits
),
state
->
work
);
&
(
state
->
next
),
&
(
state
->
distbits
),
state
->
work
);
...
@@ -1170,7 +1185,7 @@ int flush;
...
@@ -1170,7 +1185,7 @@ int flush;
#ifdef GUNZIP
#ifdef GUNZIP
state
->
flags
?
hold
:
state
->
flags
?
hold
:
#endif
#endif
REVERSE
(
hold
))
!=
state
->
check
)
{
ZSWAP32
(
hold
))
!=
state
->
check
)
{
strm
->
msg
=
(
char
*
)
"incorrect data check"
;
strm
->
msg
=
(
char
*
)
"incorrect data check"
;
state
->
mode
=
BAD
;
state
->
mode
=
BAD
;
break
;
break
;
...
@@ -1214,8 +1229,9 @@ int flush;
...
@@ -1214,8 +1229,9 @@ int flush;
*/
*/
inf_leave
:
inf_leave
:
RESTORE
();
RESTORE
();
if
(
state
->
wsize
||
(
state
->
mode
<
CHECK
&&
out
!=
strm
->
avail_out
))
if
(
state
->
wsize
||
(
out
!=
strm
->
avail_out
&&
state
->
mode
<
BAD
&&
if
(
updatewindow
(
strm
,
out
))
{
(
state
->
mode
<
CHECK
||
flush
!=
Z_FINISH
)))
if
(
updatewindow
(
strm
,
strm
->
next_out
,
out
-
strm
->
avail_out
))
{
state
->
mode
=
MEM
;
state
->
mode
=
MEM
;
return
Z_MEM_ERROR
;
return
Z_MEM_ERROR
;
}
}
...
@@ -1249,13 +1265,37 @@ z_streamp strm;
...
@@ -1249,13 +1265,37 @@ z_streamp strm;
return
Z_OK
;
return
Z_OK
;
}
}
int
ZEXPORT
inflateGetDictionary
(
strm
,
dictionary
,
dictLength
)
z_streamp
strm
;
Bytef
*
dictionary
;
uInt
*
dictLength
;
{
struct
inflate_state
FAR
*
state
;
/* check state */
if
(
strm
==
Z_NULL
||
strm
->
state
==
Z_NULL
)
return
Z_STREAM_ERROR
;
state
=
(
struct
inflate_state
FAR
*
)
strm
->
state
;
/* copy dictionary */
if
(
state
->
whave
&&
dictionary
!=
Z_NULL
)
{
zmemcpy
(
dictionary
,
state
->
window
+
state
->
wnext
,
state
->
whave
-
state
->
wnext
);
zmemcpy
(
dictionary
+
state
->
whave
-
state
->
wnext
,
state
->
window
,
state
->
wnext
);
}
if
(
dictLength
!=
Z_NULL
)
*
dictLength
=
state
->
whave
;
return
Z_OK
;
}
int
ZEXPORT
inflateSetDictionary
(
strm
,
dictionary
,
dictLength
)
int
ZEXPORT
inflateSetDictionary
(
strm
,
dictionary
,
dictLength
)
z_streamp
strm
;
z_streamp
strm
;
const
Bytef
*
dictionary
;
const
Bytef
*
dictionary
;
uInt
dictLength
;
uInt
dictLength
;
{
{
struct
inflate_state
FAR
*
state
;
struct
inflate_state
FAR
*
state
;
unsigned
long
id
;
unsigned
long
dictid
;
int
ret
;
/* check state */
/* check state */
if
(
strm
==
Z_NULL
||
strm
->
state
==
Z_NULL
)
return
Z_STREAM_ERROR
;
if
(
strm
==
Z_NULL
||
strm
->
state
==
Z_NULL
)
return
Z_STREAM_ERROR
;
...
@@ -1263,29 +1303,21 @@ uInt dictLength;
...
@@ -1263,29 +1303,21 @@ uInt dictLength;
if
(
state
->
wrap
!=
0
&&
state
->
mode
!=
DICT
)
if
(
state
->
wrap
!=
0
&&
state
->
mode
!=
DICT
)
return
Z_STREAM_ERROR
;
return
Z_STREAM_ERROR
;
/* check for correct dictionary id */
/* check for correct dictionary id
entifier
*/
if
(
state
->
mode
==
DICT
)
{
if
(
state
->
mode
==
DICT
)
{
id
=
adler32
(
0L
,
Z_NULL
,
0
);
dict
id
=
adler32
(
0L
,
Z_NULL
,
0
);
id
=
adler32
(
id
,
dictionary
,
dictLength
);
dictid
=
adler32
(
dict
id
,
dictionary
,
dictLength
);
if
(
id
!=
state
->
check
)
if
(
dict
id
!=
state
->
check
)
return
Z_DATA_ERROR
;
return
Z_DATA_ERROR
;
}
}
/* copy dictionary to window */
/* copy dictionary to window using updatewindow(), which will amend the
if
(
updatewindow
(
strm
,
strm
->
avail_out
))
{
existing dictionary if appropriate */
ret
=
updatewindow
(
strm
,
dictionary
+
dictLength
,
dictLength
);
if
(
ret
)
{
state
->
mode
=
MEM
;
state
->
mode
=
MEM
;
return
Z_MEM_ERROR
;
return
Z_MEM_ERROR
;
}
}
if
(
dictLength
>
state
->
wsize
)
{
zmemcpy
(
state
->
window
,
dictionary
+
dictLength
-
state
->
wsize
,
state
->
wsize
);
state
->
whave
=
state
->
wsize
;
}
else
{
zmemcpy
(
state
->
window
+
state
->
wsize
-
dictLength
,
dictionary
,
dictLength
);
state
->
whave
=
dictLength
;
}
state
->
havedict
=
1
;
state
->
havedict
=
1
;
Tracev
((
stderr
,
"inflate: dictionary set
\n
"
));
Tracev
((
stderr
,
"inflate: dictionary set
\n
"
));
return
Z_OK
;
return
Z_OK
;
...
@@ -1321,7 +1353,7 @@ gz_headerp head;
...
@@ -1321,7 +1353,7 @@ gz_headerp head;
*/
*/
local
unsigned
syncsearch
(
have
,
buf
,
len
)
local
unsigned
syncsearch
(
have
,
buf
,
len
)
unsigned
FAR
*
have
;
unsigned
FAR
*
have
;
unsigned
char
FAR
*
buf
;
const
unsigned
char
FAR
*
buf
;
unsigned
len
;
unsigned
len
;
{
{
unsigned
got
;
unsigned
got
;
...
@@ -1433,8 +1465,8 @@ z_streamp source;
...
@@ -1433,8 +1465,8 @@ z_streamp source;
}
}
/* copy state */
/* copy state */
zmemcpy
(
dest
,
source
,
sizeof
(
z_stream
));
zmemcpy
(
(
voidpf
)
dest
,
(
voidpf
)
source
,
sizeof
(
z_stream
));
zmemcpy
(
copy
,
state
,
sizeof
(
struct
inflate_state
));
zmemcpy
(
(
voidpf
)
copy
,
(
voidpf
)
state
,
sizeof
(
struct
inflate_state
));
if
(
state
->
lencode
>=
state
->
codes
&&
if
(
state
->
lencode
>=
state
->
codes
&&
state
->
lencode
<=
state
->
codes
+
ENOUGH
-
1
)
{
state
->
lencode
<=
state
->
codes
+
ENOUGH
-
1
)
{
copy
->
lencode
=
copy
->
codes
+
(
state
->
lencode
-
state
->
codes
);
copy
->
lencode
=
copy
->
codes
+
(
state
->
lencode
-
state
->
codes
);
...
...
deps/zlib/inftrees.c
View file @
9b87998c
/* inftrees.c -- generate Huffman trees for efficient decoding
/* inftrees.c -- generate Huffman trees for efficient decoding
* Copyright (C) 1995-201
0
Mark Adler
* Copyright (C) 1995-201
3
Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
* For conditions of distribution and use, see copyright notice in zlib.h
*/
*/
...
@@ -9,7 +9,7 @@
...
@@ -9,7 +9,7 @@
#define MAXBITS 15
#define MAXBITS 15
const
char
inflate_copyright
[]
=
const
char
inflate_copyright
[]
=
" inflate 1.2.
5 Copyright 1995-2010
Mark Adler "
;
" inflate 1.2.
8 Copyright 1995-2013
Mark Adler "
;
/*
/*
If you use the zlib library in a product, an acknowledgment is welcome
If you use the zlib library in a product, an acknowledgment is welcome
in the documentation of your product. If for some reason you cannot
in the documentation of your product. If for some reason you cannot
...
@@ -62,7 +62,7 @@ unsigned short FAR *work;
...
@@ -62,7 +62,7 @@ unsigned short FAR *work;
35
,
43
,
51
,
59
,
67
,
83
,
99
,
115
,
131
,
163
,
195
,
227
,
258
,
0
,
0
};
35
,
43
,
51
,
59
,
67
,
83
,
99
,
115
,
131
,
163
,
195
,
227
,
258
,
0
,
0
};
static
const
unsigned
short
lext
[
31
]
=
{
/* Length codes 257..285 extra */
static
const
unsigned
short
lext
[
31
]
=
{
/* Length codes 257..285 extra */
16
,
16
,
16
,
16
,
16
,
16
,
16
,
16
,
17
,
17
,
17
,
17
,
18
,
18
,
18
,
18
,
16
,
16
,
16
,
16
,
16
,
16
,
16
,
16
,
17
,
17
,
17
,
17
,
18
,
18
,
18
,
18
,
19
,
19
,
19
,
19
,
20
,
20
,
20
,
20
,
21
,
21
,
21
,
21
,
16
,
7
3
,
195
};
19
,
19
,
19
,
19
,
20
,
20
,
20
,
20
,
21
,
21
,
21
,
21
,
16
,
7
2
,
78
};
static
const
unsigned
short
dbase
[
32
]
=
{
/* Distance codes 0..29 base */
static
const
unsigned
short
dbase
[
32
]
=
{
/* Distance codes 0..29 base */
1
,
2
,
3
,
4
,
5
,
7
,
9
,
13
,
17
,
25
,
33
,
49
,
65
,
97
,
129
,
193
,
1
,
2
,
3
,
4
,
5
,
7
,
9
,
13
,
17
,
25
,
33
,
49
,
65
,
97
,
129
,
193
,
257
,
385
,
513
,
769
,
1025
,
1537
,
2049
,
3073
,
4097
,
6145
,
257
,
385
,
513
,
769
,
1025
,
1537
,
2049
,
3073
,
4097
,
6145
,
...
@@ -208,8 +208,8 @@ unsigned short FAR *work;
...
@@ -208,8 +208,8 @@ unsigned short FAR *work;
mask
=
used
-
1
;
/* mask for comparing low */
mask
=
used
-
1
;
/* mask for comparing low */
/* check available table space */
/* check available table space */
if
((
type
==
LENS
&&
used
>
=
ENOUGH_LENS
)
||
if
((
type
==
LENS
&&
used
>
ENOUGH_LENS
)
||
(
type
==
DISTS
&&
used
>
=
ENOUGH_DISTS
))
(
type
==
DISTS
&&
used
>
ENOUGH_DISTS
))
return
1
;
return
1
;
/* process all codes and make table entries */
/* process all codes and make table entries */
...
@@ -277,8 +277,8 @@ unsigned short FAR *work;
...
@@ -277,8 +277,8 @@ unsigned short FAR *work;
/* check for enough space */
/* check for enough space */
used
+=
1U
<<
curr
;
used
+=
1U
<<
curr
;
if
((
type
==
LENS
&&
used
>
=
ENOUGH_LENS
)
||
if
((
type
==
LENS
&&
used
>
ENOUGH_LENS
)
||
(
type
==
DISTS
&&
used
>
=
ENOUGH_DISTS
))
(
type
==
DISTS
&&
used
>
ENOUGH_DISTS
))
return
1
;
return
1
;
/* point entry in root table to sub-table */
/* point entry in root table to sub-table */
...
@@ -289,38 +289,14 @@ unsigned short FAR *work;
...
@@ -289,38 +289,14 @@ unsigned short FAR *work;
}
}
}
}
/*
/* fill in remaining table entry if code is incomplete (guaranteed to have
Fill in rest of table for incomplete codes. This loop is similar to the
at most one remaining entry, since if the code is incomplete, the
loop above in incrementing huff for table indices. It is assumed that
maximum code length that was allowed to get this far is one bit) */
len is equal to curr + drop, so there is no loop needed to increment
if
(
huff
!=
0
)
{
through high index bits. When the current sub-table is filled, the loop
here
.
op
=
(
unsigned
char
)
64
;
/* invalid code marker */
drops back to the root table to fill in any remaining entries there.
here
.
bits
=
(
unsigned
char
)(
len
-
drop
);
*/
here
.
val
=
(
unsigned
short
)
0
;
here
.
op
=
(
unsigned
char
)
64
;
/* invalid code marker */
next
[
huff
]
=
here
;
here
.
bits
=
(
unsigned
char
)(
len
-
drop
);
here
.
val
=
(
unsigned
short
)
0
;
while
(
huff
!=
0
)
{
/* when done with sub-table, drop back to root table */
if
(
drop
!=
0
&&
(
huff
&
mask
)
!=
low
)
{
drop
=
0
;
len
=
root
;
next
=
*
table
;
here
.
bits
=
(
unsigned
char
)
len
;
}
/* put invalid code marker in table */
next
[
huff
>>
drop
]
=
here
;
/* backwards increment the len-bit code huff */
incr
=
1U
<<
(
len
-
1
);
while
(
huff
&
incr
)
incr
>>=
1
;
if
(
incr
!=
0
)
{
huff
&=
incr
-
1
;
huff
+=
incr
;
}
else
huff
=
0
;
}
}
/* set return parameters */
/* set return parameters */
...
...
deps/zlib/trees.c
View file @
9b87998c
/* trees.c -- output deflated data using Huffman coding
/* trees.c -- output deflated data using Huffman coding
* Copyright (C) 1995-201
0
Jean-loup Gailly
* Copyright (C) 1995-201
2
Jean-loup Gailly
* detect_data_type() function provided freely by Cosmin Truta, 2006
* detect_data_type() function provided freely by Cosmin Truta, 2006
* For conditions of distribution and use, see copyright notice in zlib.h
* For conditions of distribution and use, see copyright notice in zlib.h
*/
*/
...
@@ -74,11 +74,6 @@ local const uch bl_order[BL_CODES]
...
@@ -74,11 +74,6 @@ local const uch bl_order[BL_CODES]
* probability, to avoid transmitting the lengths for unused bit length codes.
* probability, to avoid transmitting the lengths for unused bit length codes.
*/
*/
#define Buf_size (8 * 2*sizeof(char))
/* Number of bits used within bi_buf. (bi_buf might be implemented on
* more than 16 bits on some systems.)
*/
/* ===========================================================================
/* ===========================================================================
* Local data. These are initialized only once.
* Local data. These are initialized only once.
*/
*/
...
@@ -151,8 +146,8 @@ local void send_tree OF((deflate_state *s, ct_data *tree, int max_code));
...
@@ -151,8 +146,8 @@ local void send_tree OF((deflate_state *s, ct_data *tree, int max_code));
local
int
build_bl_tree
OF
((
deflate_state
*
s
));
local
int
build_bl_tree
OF
((
deflate_state
*
s
));
local
void
send_all_trees
OF
((
deflate_state
*
s
,
int
lcodes
,
int
dcodes
,
local
void
send_all_trees
OF
((
deflate_state
*
s
,
int
lcodes
,
int
dcodes
,
int
blcodes
));
int
blcodes
));
local
void
compress_block
OF
((
deflate_state
*
s
,
ct_data
*
ltree
,
local
void
compress_block
OF
((
deflate_state
*
s
,
c
onst
c
t_data
*
ltree
,
ct_data
*
dtree
));
c
onst
c
t_data
*
dtree
));
local
int
detect_data_type
OF
((
deflate_state
*
s
));
local
int
detect_data_type
OF
((
deflate_state
*
s
));
local
unsigned
bi_reverse
OF
((
unsigned
value
,
int
length
));
local
unsigned
bi_reverse
OF
((
unsigned
value
,
int
length
));
local
void
bi_windup
OF
((
deflate_state
*
s
));
local
void
bi_windup
OF
((
deflate_state
*
s
));
...
@@ -399,7 +394,6 @@ void ZLIB_INTERNAL _tr_init(s)
...
@@ -399,7 +394,6 @@ void ZLIB_INTERNAL _tr_init(s)
s
->
bi_buf
=
0
;
s
->
bi_buf
=
0
;
s
->
bi_valid
=
0
;
s
->
bi_valid
=
0
;
s
->
last_eob_len
=
8
;
/* enough lookahead for inflate */
#ifdef DEBUG
#ifdef DEBUG
s
->
compressed_len
=
0L
;
s
->
compressed_len
=
0L
;
s
->
bits_sent
=
0L
;
s
->
bits_sent
=
0L
;
...
@@ -883,15 +877,17 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last)
...
@@ -883,15 +877,17 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last)
}
}
/* ===========================================================================
/* ===========================================================================
* Flush the bits in the bit buffer to pending output (leaves at most 7 bits)
*/
void
ZLIB_INTERNAL
_tr_flush_bits
(
s
)
deflate_state
*
s
;
{
bi_flush
(
s
);
}
/* ===========================================================================
* Send one empty static block to give enough lookahead for inflate.
* Send one empty static block to give enough lookahead for inflate.
* This takes 10 bits, of which 7 may remain in the bit buffer.
* This takes 10 bits, of which 7 may remain in the bit buffer.
* The current inflate code requires 9 bits of lookahead. If the
* last two codes for the previous block (real code plus EOB) were coded
* on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode
* the last real code. In this case we send two empty static blocks instead
* of one. (There are no problems if the previous block is stored or fixed.)
* To simplify the code, we assume the worst case of last real code encoded
* on one bit only.
*/
*/
void
ZLIB_INTERNAL
_tr_align
(
s
)
void
ZLIB_INTERNAL
_tr_align
(
s
)
deflate_state
*
s
;
deflate_state
*
s
;
...
@@ -902,20 +898,6 @@ void ZLIB_INTERNAL _tr_align(s)
...
@@ -902,20 +898,6 @@ void ZLIB_INTERNAL _tr_align(s)
s
->
compressed_len
+=
10L
;
/* 3 for block type, 7 for EOB */
s
->
compressed_len
+=
10L
;
/* 3 for block type, 7 for EOB */
#endif
#endif
bi_flush
(
s
);
bi_flush
(
s
);
/* Of the 10 bits for the empty block, we have already sent
* (10 - bi_valid) bits. The lookahead for the last real code (before
* the EOB of the previous block) was thus at least one plus the length
* of the EOB plus what we have just sent of the empty static block.
*/
if
(
1
+
s
->
last_eob_len
+
10
-
s
->
bi_valid
<
9
)
{
send_bits
(
s
,
STATIC_TREES
<<
1
,
3
);
send_code
(
s
,
END_BLOCK
,
static_ltree
);
#ifdef DEBUG
s
->
compressed_len
+=
10L
;
#endif
bi_flush
(
s
);
}
s
->
last_eob_len
=
7
;
}
}
/* ===========================================================================
/* ===========================================================================
...
@@ -990,7 +972,8 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
...
@@ -990,7 +972,8 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
}
else
if
(
s
->
strategy
==
Z_FIXED
||
static_lenb
==
opt_lenb
)
{
}
else
if
(
s
->
strategy
==
Z_FIXED
||
static_lenb
==
opt_lenb
)
{
#endif
#endif
send_bits
(
s
,
(
STATIC_TREES
<<
1
)
+
last
,
3
);
send_bits
(
s
,
(
STATIC_TREES
<<
1
)
+
last
,
3
);
compress_block
(
s
,
(
ct_data
*
)
static_ltree
,
(
ct_data
*
)
static_dtree
);
compress_block
(
s
,
(
const
ct_data
*
)
static_ltree
,
(
const
ct_data
*
)
static_dtree
);
#ifdef DEBUG
#ifdef DEBUG
s
->
compressed_len
+=
3
+
s
->
static_len
;
s
->
compressed_len
+=
3
+
s
->
static_len
;
#endif
#endif
...
@@ -998,7 +981,8 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
...
@@ -998,7 +981,8 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
send_bits
(
s
,
(
DYN_TREES
<<
1
)
+
last
,
3
);
send_bits
(
s
,
(
DYN_TREES
<<
1
)
+
last
,
3
);
send_all_trees
(
s
,
s
->
l_desc
.
max_code
+
1
,
s
->
d_desc
.
max_code
+
1
,
send_all_trees
(
s
,
s
->
l_desc
.
max_code
+
1
,
s
->
d_desc
.
max_code
+
1
,
max_blindex
+
1
);
max_blindex
+
1
);
compress_block
(
s
,
(
ct_data
*
)
s
->
dyn_ltree
,
(
ct_data
*
)
s
->
dyn_dtree
);
compress_block
(
s
,
(
const
ct_data
*
)
s
->
dyn_ltree
,
(
const
ct_data
*
)
s
->
dyn_dtree
);
#ifdef DEBUG
#ifdef DEBUG
s
->
compressed_len
+=
3
+
s
->
opt_len
;
s
->
compressed_len
+=
3
+
s
->
opt_len
;
#endif
#endif
...
@@ -1075,8 +1059,8 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc)
...
@@ -1075,8 +1059,8 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc)
*/
*/
local
void
compress_block
(
s
,
ltree
,
dtree
)
local
void
compress_block
(
s
,
ltree
,
dtree
)
deflate_state
*
s
;
deflate_state
*
s
;
ct_data
*
ltree
;
/* literal tree */
c
onst
c
t_data
*
ltree
;
/* literal tree */
ct_data
*
dtree
;
/* distance tree */
c
onst
c
t_data
*
dtree
;
/* distance tree */
{
{
unsigned
dist
;
/* distance of matched string */
unsigned
dist
;
/* distance of matched string */
int
lc
;
/* match length or unmatched char (if dist == 0) */
int
lc
;
/* match length or unmatched char (if dist == 0) */
...
@@ -1118,7 +1102,6 @@ local void compress_block(s, ltree, dtree)
...
@@ -1118,7 +1102,6 @@ local void compress_block(s, ltree, dtree)
}
while
(
lx
<
s
->
last_lit
);
}
while
(
lx
<
s
->
last_lit
);
send_code
(
s
,
END_BLOCK
,
ltree
);
send_code
(
s
,
END_BLOCK
,
ltree
);
s
->
last_eob_len
=
ltree
[
END_BLOCK
].
Len
;
}
}
/* ===========================================================================
/* ===========================================================================
...
@@ -1226,7 +1209,6 @@ local void copy_block(s, buf, len, header)
...
@@ -1226,7 +1209,6 @@ local void copy_block(s, buf, len, header)
int
header
;
/* true if block header must be written */
int
header
;
/* true if block header must be written */
{
{
bi_windup
(
s
);
/* align on byte boundary */
bi_windup
(
s
);
/* align on byte boundary */
s
->
last_eob_len
=
8
;
/* enough lookahead for inflate */
if
(
header
)
{
if
(
header
)
{
put_short
(
s
,
(
ush
)
len
);
put_short
(
s
,
(
ush
)
len
);
...
...
deps/zlib/zconf.h
View file @
9b87998c
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
* forms, we didn't write zlib */
* forms, we didn't write zlib */
#if defined(_MSC_VER)
#if defined(_MSC_VER)
# pragma warning( disable : 4131 )
# pragma warning( disable : 4131 )
# pragma warning( disable : 4142 )
/* benign redefinition of type */
#endif
#endif
/* Maximum value for memLevel in deflateInit2 */
/* Maximum value for memLevel in deflateInit2 */
...
@@ -33,10 +34,12 @@
...
@@ -33,10 +34,12 @@
# define FAR
# define FAR
#endif
#endif
#define OF(args) args
#define OF(args) args
#define Z_ARG(args) args
typedef
unsigned
char
Byte
;
/* 8 bits */
typedef
unsigned
char
Byte
;
/* 8 bits */
typedef
unsigned
int
uInt
;
/* 16 bits or more */
typedef
unsigned
int
uInt
;
/* 16 bits or more */
typedef
unsigned
long
uLong
;
/* 32 bits or more */
typedef
unsigned
long
uLong
;
/* 32 bits or more */
typedef
unsigned
long
z_crc_t
;
typedef
Byte
FAR
Bytef
;
typedef
Byte
FAR
Bytef
;
typedef
char
FAR
charf
;
typedef
char
FAR
charf
;
...
@@ -50,5 +53,6 @@ typedef void *voidp;
...
@@ -50,5 +53,6 @@ typedef void *voidp;
#define z_off_t git_off_t
#define z_off_t git_off_t
#define z_off64_t z_off_t
#define z_off64_t z_off_t
#define z_const const
#endif
/* ZCONF_H */
#endif
/* ZCONF_H */
deps/zlib/zlib.h
View file @
9b87998c
/* zlib.h -- interface of the 'zlib' general purpose compression library
/* zlib.h -- interface of the 'zlib' general purpose compression library
version 1.2.
5, April 19th, 2010
version 1.2.
8, April 28th, 2013
Copyright (C) 1995-201
0
Jean-loup Gailly and Mark Adler
Copyright (C) 1995-201
3
Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
warranty. In no event will the authors be held liable for any damages
...
@@ -24,8 +24,8 @@
...
@@ -24,8 +24,8 @@
The data format used by the zlib library is described by RFCs (Request for
The data format used by the zlib library is described by RFCs (Request for
Comments) 1950 to 1952 in the files http://
www.ietf.org/rfc/rfc1950.txt
Comments) 1950 to 1952 in the files http://
tools.ietf.org/html/rfc1950
(zlib format), rfc1951
.txt (deflate format) and rfc1952.txt
(gzip format).
(zlib format), rfc1951
(deflate format) and rfc1952
(gzip format).
*/
*/
#ifndef ZLIB_H
#ifndef ZLIB_H
...
@@ -37,11 +37,11 @@
...
@@ -37,11 +37,11 @@
extern
"C"
{
extern
"C"
{
#endif
#endif
#define ZLIB_VERSION "1.2.
5
"
#define ZLIB_VERSION "1.2.
8
"
#define ZLIB_VERNUM 0x12
5
0
#define ZLIB_VERNUM 0x12
8
0
#define ZLIB_VER_MAJOR 1
#define ZLIB_VER_MAJOR 1
#define ZLIB_VER_MINOR 2
#define ZLIB_VER_MINOR 2
#define ZLIB_VER_REVISION
5
#define ZLIB_VER_REVISION
8
#define ZLIB_VER_SUBREVISION 0
#define ZLIB_VER_SUBREVISION 0
/*
/*
...
@@ -83,15 +83,15 @@ typedef void (*free_func) OF((voidpf opaque, voidpf address));
...
@@ -83,15 +83,15 @@ typedef void (*free_func) OF((voidpf opaque, voidpf address));
struct
internal_state
;
struct
internal_state
;
typedef
struct
z_stream_s
{
typedef
struct
z_stream_s
{
Bytef
*
next_in
;
/* next input byte */
z_const
Bytef
*
next_in
;
/* next input byte */
uInt
avail_in
;
/* number of bytes available at next_in */
uInt
avail_in
;
/* number of bytes available at next_in */
uLong
total_in
;
/* total n
b
of input bytes read so far */
uLong
total_in
;
/* total n
umber
of input bytes read so far */
Bytef
*
next_out
;
/* next output byte should be put there */
Bytef
*
next_out
;
/* next output byte should be put there */
uInt
avail_out
;
/* remaining free space at next_out */
uInt
avail_out
;
/* remaining free space at next_out */
uLong
total_out
;
/* total n
b
of bytes output so far */
uLong
total_out
;
/* total n
umber
of bytes output so far */
char
*
msg
;
/* last error message, NULL if no error */
z_const
char
*
msg
;
/* last error message, NULL if no error */
struct
internal_state
FAR
*
state
;
/* not visible by applications */
struct
internal_state
FAR
*
state
;
/* not visible by applications */
alloc_func
zalloc
;
/* used to allocate the internal state */
alloc_func
zalloc
;
/* used to allocate the internal state */
...
@@ -327,8 +327,9 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
...
@@ -327,8 +327,9 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
Z_FINISH can be used immediately after deflateInit if all the compression
Z_FINISH can be used immediately after deflateInit if all the compression
is to be done in a single step. In this case, avail_out must be at least the
is to be done in a single step. In this case, avail_out must be at least the
value returned by deflateBound (see below). If deflate does not return
value returned by deflateBound (see below). Then deflate is guaranteed to
Z_STREAM_END, then it must be called again as described above.
return Z_STREAM_END. If not enough output space is provided, deflate will
not return Z_STREAM_END, and it must be called again as described above.
deflate() sets strm->adler to the adler32 checksum of all input read
deflate() sets strm->adler to the adler32 checksum of all input read
so far (that is, total_in bytes).
so far (that is, total_in bytes).
...
@@ -451,23 +452,29 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
...
@@ -451,23 +452,29 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
error. However if all decompression is to be performed in a single step (a
error. However if all decompression is to be performed in a single step (a
single call of inflate), the parameter flush should be set to Z_FINISH. In
single call of inflate), the parameter flush should be set to Z_FINISH. In
this case all pending input is processed and all pending output is flushed;
this case all pending input is processed and all pending output is flushed;
avail_out must be large enough to hold all the uncompressed data. (The size
avail_out must be large enough to hold all of the uncompressed data for the
of the uncompressed data may have been saved by the compressor for this
operation to complete. (The size of the uncompressed data may have been
purpose.) The next operation on this stream must be inflateEnd to deallocate
saved by the compressor for this purpose.) The use of Z_FINISH is not
the decompression state. The use of Z_FINISH is never required, but can be
required to perform an inflation in one step. However it may be used to
used to inform inflate that a faster approach may be used for the single
inform inflate that a faster approach can be used for the single inflate()
inflate() call.
call. Z_FINISH also informs inflate to not maintain a sliding window if the
stream completes, which reduces inflate's memory footprint. If the stream
does not complete, either because not all of the stream is provided or not
enough output space is provided, then a sliding window will be allocated and
inflate() can be called again to continue the operation as if Z_NO_FLUSH had
been used.
In this implementation, inflate() always flushes as much output as
In this implementation, inflate() always flushes as much output as
possible to the output buffer, and always uses the faster approach on the
possible to the output buffer, and always uses the faster approach on the
first call. So the only effect of the flush parameter in this implementation
first call. So the effects of the flush parameter in this implementation are
is on the return value of inflate(), as noted below, or when it returns early
on the return value of inflate() as noted below, when inflate() returns early
because Z_BLOCK or Z_TREES is used.
when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of
memory for a sliding window when Z_FINISH is used.
If a preset dictionary is needed after this call (see inflateSetDictionary
If a preset dictionary is needed after this call (see inflateSetDictionary
below), inflate sets strm->adler to the
adler
32 checksum of the dictionary
below), inflate sets strm->adler to the
Adler-
32 checksum of the dictionary
chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
strm->adler to the
adler
32 checksum of all output produced so far (that is,
strm->adler to the
Adler-
32 checksum of all output produced so far (that is,
total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
below. At the end of the stream, inflate() checks that its computed adler32
below. At the end of the stream, inflate() checks that its computed adler32
checksum is equal to that saved by the compressor and returns Z_STREAM_END
checksum is equal to that saved by the compressor and returns Z_STREAM_END
...
@@ -478,7 +485,9 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
...
@@ -478,7 +485,9 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
initializing with inflateInit2(). Any information contained in the gzip
initializing with inflateInit2(). Any information contained in the gzip
header is not retained, so applications that need that information should
header is not retained, so applications that need that information should
instead use raw inflate, see inflateInit2() below, or inflateBack() and
instead use raw inflate, see inflateInit2() below, or inflateBack() and
perform their own processing of the gzip header and trailer.
perform their own processing of the gzip header and trailer. When processing
gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
producted so far. The CRC-32 is checked against the gzip trailer.
inflate() returns Z_OK if some progress has been made (more input processed
inflate() returns Z_OK if some progress has been made (more input processed
or more output produced), Z_STREAM_END if the end of the compressed data has
or more output produced), Z_STREAM_END if the end of the compressed data has
...
@@ -580,10 +589,15 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
...
@@ -580,10 +589,15 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
uInt
dictLength
));
uInt
dictLength
));
/*
/*
Initializes the compression dictionary from the given byte sequence
Initializes the compression dictionary from the given byte sequence
without producing any compressed output. This function must be called
without producing any compressed output. When using the zlib format, this
immediately after deflateInit, deflateInit2 or deflateReset, before any call
function must be called immediately after deflateInit, deflateInit2 or
of deflate. The compressor and decompressor must use exactly the same
deflateReset, and before any call of deflate. When doing raw deflate, this
dictionary (see inflateSetDictionary).
function must be called either before any call of deflate, or immediately
after the completion of a deflate block, i.e. after all input has been
consumed and all output has been delivered when using any of the flush
options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH. The
compressor and decompressor must use exactly the same dictionary (see
inflateSetDictionary).
The dictionary should consist of strings (byte sequences) that are likely
The dictionary should consist of strings (byte sequences) that are likely
to be encountered later in the data to be compressed, with the most commonly
to be encountered later in the data to be compressed, with the most commonly
...
@@ -610,8 +624,8 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
...
@@ -610,8 +624,8 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
inconsistent (for example if deflate has already been called for this stream
inconsistent (for example if deflate has already been called for this stream
or if
the compression method is bsort). deflateSetDictionary does not
or if
not at a block boundary for raw deflate). deflateSetDictionary does
perform any compression: this will be done by deflate().
not
perform any compression: this will be done by deflate().
*/
*/
ZEXTERN
int
ZEXPORT
deflateCopy
OF
((
z_streamp
dest
,
ZEXTERN
int
ZEXPORT
deflateCopy
OF
((
z_streamp
dest
,
...
@@ -688,8 +702,28 @@ ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,
...
@@ -688,8 +702,28 @@ ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,
deflation of sourceLen bytes. It must be called after deflateInit() or
deflation of sourceLen bytes. It must be called after deflateInit() or
deflateInit2(), and after deflateSetHeader(), if used. This would be used
deflateInit2(), and after deflateSetHeader(), if used. This would be used
to allocate an output buffer for deflation in a single pass, and so would be
to allocate an output buffer for deflation in a single pass, and so would be
called before deflate().
called before deflate(). If that first deflate() call is provided the
*/
sourceLen input bytes, an output buffer allocated to the size returned by
deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed
to return Z_STREAM_END. Note that it is possible for the compressed size to
be larger than the value returned by deflateBound() if flush options other
than Z_FINISH or Z_NO_FLUSH are used.
*/
ZEXTERN
int
ZEXPORT
deflatePending
OF
((
z_streamp
strm
,
unsigned
*
pending
,
int
*
bits
));
/*
deflatePending() returns the number of bytes and bits of output that have
been generated, but not yet provided in the available output. The bytes not
provided would be due to the available output space having being consumed.
The number of bits of output not provided are between 0 and 7, where they
await more bits to join them in order to fill out a full byte. If pending
or bits are Z_NULL, then those values are not set.
deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source
stream state was inconsistent.
*/
ZEXTERN
int
ZEXPORT
deflatePrime
OF
((
z_streamp
strm
,
ZEXTERN
int
ZEXPORT
deflatePrime
OF
((
z_streamp
strm
,
int
bits
,
int
bits
,
...
@@ -703,8 +737,9 @@ ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
...
@@ -703,8 +737,9 @@ ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
than or equal to 16, and that many of the least significant bits of value
than or equal to 16, and that many of the least significant bits of value
will be inserted in the output.
will be inserted in the output.
deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough
stream state was inconsistent.
room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the
source stream state was inconsistent.
*/
*/
ZEXTERN
int
ZEXPORT
deflateSetHeader
OF
((
z_streamp
strm
,
ZEXTERN
int
ZEXPORT
deflateSetHeader
OF
((
z_streamp
strm
,
...
@@ -790,10 +825,11 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
...
@@ -790,10 +825,11 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
if that call returned Z_NEED_DICT. The dictionary chosen by the compressor
if that call returned Z_NEED_DICT. The dictionary chosen by the compressor
can be determined from the adler32 value returned by that call of inflate.
can be determined from the adler32 value returned by that call of inflate.
The compressor and decompressor must use exactly the same dictionary (see
The compressor and decompressor must use exactly the same dictionary (see
deflateSetDictionary). For raw inflate, this function can be called
deflateSetDictionary). For raw inflate, this function can be called at any
immediately after inflateInit2() or inflateReset() and before any call of
time to set the dictionary. If the provided dictionary is smaller than the
inflate() to set the dictionary. The application must insure that the
window and there is already data in the window, then the provided dictionary
dictionary that was used for compression is provided.
will amend what's there. The application must insure that the dictionary
that was used for compression is provided.
inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
...
@@ -803,19 +839,38 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
...
@@ -803,19 +839,38 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
inflate().
inflate().
*/
*/
ZEXTERN
int
ZEXPORT
inflateGetDictionary
OF
((
z_streamp
strm
,
Bytef
*
dictionary
,
uInt
*
dictLength
));
/*
Returns the sliding dictionary being maintained by inflate. dictLength is
set to the number of bytes in the dictionary, and that many bytes are copied
to dictionary. dictionary must have enough space, where 32768 bytes is
always enough. If inflateGetDictionary() is called with dictionary equal to
Z_NULL, then only the dictionary length is returned, and nothing is copied.
Similary, if dictLength is Z_NULL, then it is not set.
inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
stream state is inconsistent.
*/
ZEXTERN
int
ZEXPORT
inflateSync
OF
((
z_streamp
strm
));
ZEXTERN
int
ZEXPORT
inflateSync
OF
((
z_streamp
strm
));
/*
/*
Skips invalid compressed data until a
full flush point (see above th
e
Skips invalid compressed data until a
possible full flush point (see abov
e
description of deflate with Z_FULL_FLUSH) can be found, or until all
for the
description of deflate with Z_FULL_FLUSH) can be found, or until all
available input is skipped. No output is provided.
available input is skipped. No output is provided.
inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
inflateSync searches for a 00 00 FF FF pattern in the compressed data.
if no more input was provided, Z_DATA_ERROR if no flush point has been
All full flush points have this pattern, but not all occurrences of this
found, or Z_STREAM_ERROR if the stream structure was inconsistent. In the
pattern are full flush points.
success case, the application may save the current current value of total_in
which indicates where valid compressed data was found. In the error case,
inflateSync returns Z_OK if a possible full flush point has been found,
the application may repeatedly call inflateSync, providing more input each
Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point
time, until success or end of the input data.
has been found, or Z_STREAM_ERROR if the stream structure was inconsistent.
In the success case, the application may save the current current value of
total_in which indicates where valid compressed data was found. In the
error case, the application may repeatedly call inflateSync, providing more
input each time, until success or end of the input data.
*/
*/
ZEXTERN
int
ZEXPORT
inflateCopy
OF
((
z_streamp
dest
,
ZEXTERN
int
ZEXPORT
inflateCopy
OF
((
z_streamp
dest
,
...
@@ -962,12 +1017,13 @@ ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
...
@@ -962,12 +1017,13 @@ ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
See inflateBack() for the usage of these routines.
See inflateBack() for the usage of these routines.
inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
the param
a
ters are invalid, Z_MEM_ERROR if the internal state could not be
the param
e
ters are invalid, Z_MEM_ERROR if the internal state could not be
allocated, or Z_VERSION_ERROR if the version of the library does not match
allocated, or Z_VERSION_ERROR if the version of the library does not match
the version of the header file.
the version of the header file.
*/
*/
typedef
unsigned
(
*
in_func
)
OF
((
void
FAR
*
,
unsigned
char
FAR
*
FAR
*
));
typedef
unsigned
(
*
in_func
)
OF
((
void
FAR
*
,
z_const
unsigned
char
FAR
*
FAR
*
));
typedef
int
(
*
out_func
)
OF
((
void
FAR
*
,
unsigned
char
FAR
*
,
unsigned
));
typedef
int
(
*
out_func
)
OF
((
void
FAR
*
,
unsigned
char
FAR
*
,
unsigned
));
ZEXTERN
int
ZEXPORT
inflateBack
OF
((
z_streamp
strm
,
ZEXTERN
int
ZEXPORT
inflateBack
OF
((
z_streamp
strm
,
...
@@ -975,11 +1031,12 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
...
@@ -975,11 +1031,12 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
out_func
out
,
void
FAR
*
out_desc
));
out_func
out
,
void
FAR
*
out_desc
));
/*
/*
inflateBack() does a raw inflate with a single call using a call-back
inflateBack() does a raw inflate with a single call using a call-back
interface for input and output. This is more efficient than inflate() for
interface for input and output. This is potentially more efficient than
file i/o applications in that it avoids copying between the output and the
inflate() for file i/o applications, in that it avoids copying between the
sliding window by simply making the window itself the output buffer. This
output and the sliding window by simply making the window itself the output
function trusts the application to not change the output buffer passed by
buffer. inflate() can be faster on modern CPUs when used with large
the output function, at least until inflateBack() returns.
buffers. inflateBack() trusts the application to not change the output
buffer passed by the output function, at least until inflateBack() returns.
inflateBackInit() must be called first to allocate the internal state
inflateBackInit() must be called first to allocate the internal state
and to initialize the state with the user-provided window buffer.
and to initialize the state with the user-provided window buffer.
...
@@ -1088,6 +1145,7 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
...
@@ -1088,6 +1145,7 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
27-31: 0 (reserved)
27-31: 0 (reserved)
*/
*/
#ifndef Z_SOLO
/* utility functions */
/* utility functions */
...
@@ -1149,10 +1207,11 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
...
@@ -1149,10 +1207,11 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
enough memory, Z_BUF_ERROR if there was not enough room in the output
enough memory, Z_BUF_ERROR if there was not enough room in the output
buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.
buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. In
the case where there is not enough room, uncompress() will fill the output
buffer with the uncompressed data up to that point.
*/
*/
/* gzip file access functions */
/* gzip file access functions */
/*
/*
...
@@ -1162,7 +1221,7 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
...
@@ -1162,7 +1221,7 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
wrapper, documented in RFC 1952, wrapped around a deflate stream.
wrapper, documented in RFC 1952, wrapped around a deflate stream.
*/
*/
typedef
voidp
gzFile
;
/*
opaque gzip file descriptor */
typedef
struct
gzFile_s
*
gzFile
;
/* semi-
opaque gzip file descriptor */
/*
/*
ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
...
@@ -1172,13 +1231,28 @@ ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
...
@@ -1172,13 +1231,28 @@ ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
for fixed code compression as in "wb9F". (See the description of
for fixed code compression as in "wb9F". (See the description of
deflateInit2 for more information about the strategy parameter.) Also "a"
deflateInit2 for more information about the strategy parameter.) 'T' will
can be used instead of "w" to request that the gzip stream that will be
request transparent writing or appending with no compression and not using
written be appended to the file. "+" will result in an error, since reading
the gzip format.
and writing to the same gzip file is not supported.
"a" can be used instead of "w" to request that the gzip stream that will
be written be appended to the file. "+" will result in an error, since
reading and writing to the same gzip file is not supported. The addition of
"x" when writing will create the file exclusively, which fails if the file
already exists. On systems that support it, the addition of "e" when
reading or writing will set the flag to close the file on an execve() call.
These functions, as well as gzip, will read and decode a sequence of gzip
streams in a file. The append function of gzopen() can be used to create
such a file. (Also see gzflush() for another way to do this.) When
appending, gzopen does not test whether the file begins with a gzip stream,
nor does it look for the end of the gzip streams to begin appending. gzopen
will simply append a gzip stream to the existing file.
gzopen can be used to read a file which is not in gzip format; in this
gzopen can be used to read a file which is not in gzip format; in this
case gzread will directly read from the file without decompression.
case gzread will directly read from the file without decompression. When
reading, this will be detected automatically by looking for the magic two-
byte gzip header.
gzopen returns NULL if the file could not be opened, if there was
gzopen returns NULL if the file could not be opened, if there was
insufficient memory to allocate the gzFile state, or if an invalid mode was
insufficient memory to allocate the gzFile state, or if an invalid mode was
...
@@ -1197,7 +1271,11 @@ ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
...
@@ -1197,7 +1271,11 @@ ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
mode);. The duplicated descriptor should be saved to avoid a leak, since
mode);. The duplicated descriptor should be saved to avoid a leak, since
gzdopen does not close fd if it fails.
gzdopen does not close fd if it fails. If you are using fileno() to get the
file descriptor from a FILE *, then you will have to use dup() to avoid
double-close()ing the file descriptor. Both gzclose() and fclose() will
close the associated file descriptor, so they need to have different file
descriptors.
gzdopen returns NULL if there was insufficient memory to allocate the
gzdopen returns NULL if there was insufficient memory to allocate the
gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not
gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not
...
@@ -1235,14 +1313,26 @@ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
...
@@ -1235,14 +1313,26 @@ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
ZEXTERN
int
ZEXPORT
gzread
OF
((
gzFile
file
,
voidp
buf
,
unsigned
len
));
ZEXTERN
int
ZEXPORT
gzread
OF
((
gzFile
file
,
voidp
buf
,
unsigned
len
));
/*
/*
Reads the given number of uncompressed bytes from the compressed file. If
Reads the given number of uncompressed bytes from the compressed file. If
the input file
wa
s not in gzip format, gzread copies the given number of
the input file
i
s not in gzip format, gzread copies the given number of
bytes into the buffer.
bytes into the buffer
directly from the file
.
After reaching the end of a gzip stream in the input, gzread will continue
After reaching the end of a gzip stream in the input, gzread will continue
to read, looking for another gzip stream, or failing that, reading the rest
to read, looking for another gzip stream. Any number of gzip streams may be
of the input file directly without decompression. The entire input file
concatenated in the input file, and will all be decompressed by gzread().
will be read if gzread is called until it returns less than the requested
If something other than a gzip stream is encountered after a gzip stream,
len.
that remaining trailing garbage is ignored (and no error is returned).
gzread can be used to read a gzip file that is being concurrently written.
Upon reaching the end of the input, gzread will return with the available
data. If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then
gzclearerr can be used to clear the end of file indicator in order to permit
gzread to be tried again. Z_OK indicates that a gzip stream was completed
on the last gzread. Z_BUF_ERROR indicates that the input file ended in the
middle of a gzip stream. Note that gzread does not return -1 in the event
of an incomplete gzip stream. This error is deferred until gzclose(), which
will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip
stream. Alternatively, gzerror can be used before gzclose to detect this
case.
gzread returns the number of uncompressed bytes actually read, less than
gzread returns the number of uncompressed bytes actually read, less than
len for end of file, or -1 for error.
len for end of file, or -1 for error.
...
@@ -1256,7 +1346,7 @@ ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
...
@@ -1256,7 +1346,7 @@ ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
error.
error.
*/
*/
ZEXTERN
int
ZEXPORTVA
gzprintf
OF
((
gzFile
file
,
const
char
*
format
,
...));
ZEXTERN
int
ZEXPORTVA
gzprintf
Z_ARG
((
gzFile
file
,
const
char
*
format
,
...));
/*
/*
Converts, formats, and writes the arguments to the compressed file under
Converts, formats, and writes the arguments to the compressed file under
control of the format string, as in fprintf. gzprintf returns the number of
control of the format string, as in fprintf. gzprintf returns the number of
...
@@ -1301,7 +1391,10 @@ ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
...
@@ -1301,7 +1391,10 @@ ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
ZEXTERN
int
ZEXPORT
gzgetc
OF
((
gzFile
file
));
ZEXTERN
int
ZEXPORT
gzgetc
OF
((
gzFile
file
));
/*
/*
Reads one byte from the compressed file. gzgetc returns this byte or -1
Reads one byte from the compressed file. gzgetc returns this byte or -1
in case of end of file or error.
in case of end of file or error. This is implemented as a macro for speed.
As such, it does not do all of the checking the other functions do. I.e.
it does not check to see if file is NULL, nor whether the structure file
points to has been clobbered or not.
*/
*/
ZEXTERN
int
ZEXPORT
gzungetc
OF
((
int
c
,
gzFile
file
));
ZEXTERN
int
ZEXPORT
gzungetc
OF
((
int
c
,
gzFile
file
));
...
@@ -1397,9 +1490,7 @@ ZEXTERN int ZEXPORT gzeof OF((gzFile file));
...
@@ -1397,9 +1490,7 @@ ZEXTERN int ZEXPORT gzeof OF((gzFile file));
ZEXTERN
int
ZEXPORT
gzdirect
OF
((
gzFile
file
));
ZEXTERN
int
ZEXPORT
gzdirect
OF
((
gzFile
file
));
/*
/*
Returns true (1) if file is being copied directly while reading, or false
Returns true (1) if file is being copied directly while reading, or false
(0) if file is a gzip stream being decompressed. This state can change from
(0) if file is a gzip stream being decompressed.
false to true while reading the input file if the end of a gzip stream is
reached, but is followed by data that is not another gzip stream.
If the input file is empty, gzdirect() will return true, since the input
If the input file is empty, gzdirect() will return true, since the input
does not contain a gzip stream.
does not contain a gzip stream.
...
@@ -1408,6 +1499,13 @@ ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
...
@@ -1408,6 +1499,13 @@ ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
cause buffers to be allocated to allow reading the file to determine if it
cause buffers to be allocated to allow reading the file to determine if it
is a gzip file. Therefore if gzbuffer() is used, it should be called before
is a gzip file. Therefore if gzbuffer() is used, it should be called before
gzdirect().
gzdirect().
When writing, gzdirect() returns true (1) if transparent writing was
requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note:
gzdirect() is not needed when writing. Transparent writing must be
explicitly requested, so the application already knows the answer. When
linking statically, using gzdirect() will include all of the zlib code for
gzip file reading and decompression, which may not be desired.)
*/
*/
ZEXTERN
int
ZEXPORT
gzclose
OF
((
gzFile
file
));
ZEXTERN
int
ZEXPORT
gzclose
OF
((
gzFile
file
));
...
@@ -1419,7 +1517,8 @@ ZEXTERN int ZEXPORT gzclose OF((gzFile file));
...
@@ -1419,7 +1517,8 @@ ZEXTERN int ZEXPORT gzclose OF((gzFile file));
must not be called more than once on the same allocation.
must not be called more than once on the same allocation.
gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
file operation error, or Z_OK on success.
file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the
last read ended in the middle of a gzip stream, or Z_OK on success.
*/
*/
ZEXTERN
int
ZEXPORT
gzclose_r
OF
((
gzFile
file
));
ZEXTERN
int
ZEXPORT
gzclose_r
OF
((
gzFile
file
));
...
@@ -1457,6 +1556,7 @@ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
...
@@ -1457,6 +1556,7 @@ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
file that is being written concurrently.
file that is being written concurrently.
*/
*/
#endif
/* !Z_SOLO */
/* checksum functions */
/* checksum functions */
...
@@ -1492,16 +1592,17 @@ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
...
@@ -1492,16 +1592,17 @@ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
Combine two Adler-32 checksums into one. For two sequences of bytes, seq1
Combine two Adler-32 checksums into one. For two sequences of bytes, seq1
and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of
each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of
seq1 and seq2 concatenated, requiring only adler1, adler2, and len2.
seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note
that the z_off_t type (like off_t) is a signed integer. If len2 is
negative, the result has no meaning or utility.
*/
*/
ZEXTERN
uLong
ZEXPORT
crc32
OF
((
uLong
crc
,
const
Bytef
*
buf
,
uInt
len
));
ZEXTERN
uLong
ZEXPORT
crc32
OF
((
uLong
crc
,
const
Bytef
*
buf
,
uInt
len
));
/*
/*
Update a running CRC-32 with the bytes buf[0..len-1] and return the
Update a running CRC-32 with the bytes buf[0..len-1] and return the
updated CRC-32. If buf is Z_NULL, this function returns the required
updated CRC-32. If buf is Z_NULL, this function returns the required
initial value for the for the crc. Pre- and post-conditioning (one's
initial value for the crc. Pre- and post-conditioning (one's complement) is
complement) is performed within this function so it shouldn't be done by the
performed within this function so it shouldn't be done by the application.
application.
Usage example:
Usage example:
...
@@ -1544,17 +1645,42 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
...
@@ -1544,17 +1645,42 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
const
char
*
version
,
const
char
*
version
,
int
stream_size
));
int
stream_size
));
#define deflateInit(strm, level) \
#define deflateInit(strm, level) \
deflateInit_((strm), (level),
ZLIB_VERSION,
sizeof(z_stream))
deflateInit_((strm), (level),
ZLIB_VERSION, (int)
sizeof(z_stream))
#define inflateInit(strm) \
#define inflateInit(strm) \
inflateInit_((strm),
ZLIB_VERSION,
sizeof(z_stream))
inflateInit_((strm),
ZLIB_VERSION, (int)
sizeof(z_stream))
#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
(strategy),
ZLIB_VERSION,
sizeof(z_stream))
(strategy),
ZLIB_VERSION, (int)
sizeof(z_stream))
#define inflateInit2(strm, windowBits) \
#define inflateInit2(strm, windowBits) \
inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
(int)sizeof(z_stream))
#define inflateBackInit(strm, windowBits, window) \
#define inflateBackInit(strm, windowBits, window) \
inflateBackInit_((strm), (windowBits), (window), \
inflateBackInit_((strm), (windowBits), (window), \
ZLIB_VERSION, sizeof(z_stream))
ZLIB_VERSION, (int)sizeof(z_stream))
#ifndef Z_SOLO
/* gzgetc() macro and its supporting function and exposed data structure. Note
* that the real internal state is much larger than the exposed structure.
* This abbreviated structure exposes just enough for the gzgetc() macro. The
* user should not mess with these exposed elements, since their names or
* behavior could change in the future, perhaps even capriciously. They can
* only be used by the gzgetc() macro. You have been warned.
*/
struct
gzFile_s
{
unsigned
have
;
unsigned
char
*
next
;
z_off64_t
pos
;
};
ZEXTERN
int
ZEXPORT
gzgetc_
OF
((
gzFile
file
));
/* backward compatibility */
#ifdef Z_PREFIX_SET
# undef z_gzgetc
# define z_gzgetc(g) \
((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
#else
# define gzgetc(g) \
((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
#endif
/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
* change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if
* change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if
...
@@ -1562,7 +1688,7 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
...
@@ -1562,7 +1688,7 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
* functions are changed to 64 bits) -- in case these are set on systems
* functions are changed to 64 bits) -- in case these are set on systems
* without large file support, _LFS64_LARGEFILE must also be true
* without large file support, _LFS64_LARGEFILE must also be true
*/
*/
#if
defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
#if
def Z_LARGE64
ZEXTERN
gzFile
ZEXPORT
gzopen64
OF
((
const
char
*
,
const
char
*
));
ZEXTERN
gzFile
ZEXPORT
gzopen64
OF
((
const
char
*
,
const
char
*
));
ZEXTERN
z_off64_t
ZEXPORT
gzseek64
OF
((
gzFile
,
z_off64_t
,
int
));
ZEXTERN
z_off64_t
ZEXPORT
gzseek64
OF
((
gzFile
,
z_off64_t
,
int
));
ZEXTERN
z_off64_t
ZEXPORT
gztell64
OF
((
gzFile
));
ZEXTERN
z_off64_t
ZEXPORT
gztell64
OF
((
gzFile
));
...
@@ -1571,14 +1697,23 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
...
@@ -1571,14 +1697,23 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
ZEXTERN
uLong
ZEXPORT
crc32_combine64
OF
((
uLong
,
uLong
,
z_off64_t
));
ZEXTERN
uLong
ZEXPORT
crc32_combine64
OF
((
uLong
,
uLong
,
z_off64_t
));
#endif
#endif
#if !defined(ZLIB_INTERNAL) && _FILE_OFFSET_BITS-0 == 64 && _LFS64_LARGEFILE-0
#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
# define gzopen gzopen64
# ifdef Z_PREFIX_SET
# define gzseek gzseek64
# define z_gzopen z_gzopen64
# define gztell gztell64
# define z_gzseek z_gzseek64
# define gzoffset gzoffset64
# define z_gztell z_gztell64
# define adler32_combine adler32_combine64
# define z_gzoffset z_gzoffset64
# define crc32_combine crc32_combine64
# define z_adler32_combine z_adler32_combine64
# ifdef _LARGEFILE64_SOURCE
# define z_crc32_combine z_crc32_combine64
# else
# define gzopen gzopen64
# define gzseek gzseek64
# define gztell gztell64
# define gzoffset gzoffset64
# define adler32_combine adler32_combine64
# define crc32_combine crc32_combine64
# endif
# ifndef Z_LARGE64
ZEXTERN
gzFile
ZEXPORT
gzopen64
OF
((
const
char
*
,
const
char
*
));
ZEXTERN
gzFile
ZEXPORT
gzopen64
OF
((
const
char
*
,
const
char
*
));
ZEXTERN
z_off_t
ZEXPORT
gzseek64
OF
((
gzFile
,
z_off_t
,
int
));
ZEXTERN
z_off_t
ZEXPORT
gzseek64
OF
((
gzFile
,
z_off_t
,
int
));
ZEXTERN
z_off_t
ZEXPORT
gztell64
OF
((
gzFile
));
ZEXTERN
z_off_t
ZEXPORT
gztell64
OF
((
gzFile
));
...
@@ -1595,6 +1730,13 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
...
@@ -1595,6 +1730,13 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
ZEXTERN
uLong
ZEXPORT
crc32_combine
OF
((
uLong
,
uLong
,
z_off_t
));
ZEXTERN
uLong
ZEXPORT
crc32_combine
OF
((
uLong
,
uLong
,
z_off_t
));
#endif
#endif
#else
/* Z_SOLO */
ZEXTERN
uLong
ZEXPORT
adler32_combine
OF
((
uLong
,
uLong
,
z_off_t
));
ZEXTERN
uLong
ZEXPORT
crc32_combine
OF
((
uLong
,
uLong
,
z_off_t
));
#endif
/* !Z_SOLO */
/* hack for buggy compilers */
/* hack for buggy compilers */
#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
struct
internal_state
{
int
dummy
;};
struct
internal_state
{
int
dummy
;};
...
@@ -1603,8 +1745,21 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
...
@@ -1603,8 +1745,21 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
/* undocumented functions */
/* undocumented functions */
ZEXTERN
const
char
*
ZEXPORT
zError
OF
((
int
));
ZEXTERN
const
char
*
ZEXPORT
zError
OF
((
int
));
ZEXTERN
int
ZEXPORT
inflateSyncPoint
OF
((
z_streamp
));
ZEXTERN
int
ZEXPORT
inflateSyncPoint
OF
((
z_streamp
));
ZEXTERN
const
uLongf
*
ZEXPORT
get_crc_table
OF
((
void
));
ZEXTERN
const
z_crc_t
FAR
*
ZEXPORT
get_crc_table
OF
((
void
));
ZEXTERN
int
ZEXPORT
inflateUndermine
OF
((
z_streamp
,
int
));
ZEXTERN
int
ZEXPORT
inflateUndermine
OF
((
z_streamp
,
int
));
ZEXTERN
int
ZEXPORT
inflateResetKeep
OF
((
z_streamp
));
ZEXTERN
int
ZEXPORT
deflateResetKeep
OF
((
z_streamp
));
#if defined(_WIN32) && !defined(Z_SOLO)
ZEXTERN
gzFile
ZEXPORT
gzopen_w
OF
((
const
wchar_t
*
path
,
const
char
*
mode
));
#endif
#if defined(STDC) || defined(Z_HAVE_STDARG_H)
# ifndef Z_SOLO
ZEXTERN
int
ZEXPORTVA
gzvprintf
Z_ARG
((
gzFile
file
,
const
char
*
format
,
va_list
va
));
# endif
#endif
#ifdef __cplusplus
#ifdef __cplusplus
}
}
...
...
deps/zlib/zutil.c
View file @
9b87998c
/* zutil.c -- target dependent utility functions for the compression library
/* zutil.c -- target dependent utility functions for the compression library
* Copyright (C) 1995-2005, 2010 Jean-loup Gailly.
* Copyright (C) 1995-2005, 2010
, 2011, 2012
Jean-loup Gailly.
* For conditions of distribution and use, see copyright notice in zlib.h
* For conditions of distribution and use, see copyright notice in zlib.h
*/
*/
...
@@ -11,7 +11,7 @@
...
@@ -11,7 +11,7 @@
struct
internal_state
{
int
dummy
;};
/* for buggy compilers */
struct
internal_state
{
int
dummy
;};
/* for buggy compilers */
#endif
#endif
const
char
*
const
z_errmsg
[
10
]
=
{
z_
const
char
*
const
z_errmsg
[
10
]
=
{
"need dictionary"
,
/* Z_NEED_DICT 2 */
"need dictionary"
,
/* Z_NEED_DICT 2 */
"stream end"
,
/* Z_STREAM_END 1 */
"stream end"
,
/* Z_STREAM_END 1 */
""
,
/* Z_OK 0 */
""
,
/* Z_OK 0 */
...
@@ -85,27 +85,27 @@ uLong ZEXPORT zlibCompileFlags()
...
@@ -85,27 +85,27 @@ uLong ZEXPORT zlibCompileFlags()
#ifdef FASTEST
#ifdef FASTEST
flags
+=
1L
<<
21
;
flags
+=
1L
<<
21
;
#endif
#endif
#if
def STDC
#if
defined(STDC) || defined(Z_HAVE_STDARG_H)
# ifdef NO_vsnprintf
# ifdef NO_vsnprintf
flags
+=
1L
<<
25
;
flags
+=
1L
<<
25
;
# ifdef HAS_vsprintf_void
# ifdef HAS_vsprintf_void
flags
+=
1L
<<
26
;
flags
+=
1L
<<
26
;
# endif
# endif
# else
# else
# ifdef HAS_vsnprintf_void
# ifdef HAS_vsnprintf_void
flags
+=
1L
<<
26
;
flags
+=
1L
<<
26
;
# endif
# endif
# endif
# endif
#else
#else
flags
+=
1L
<<
24
;
flags
+=
1L
<<
24
;
# ifdef NO_snprintf
# ifdef NO_snprintf
flags
+=
1L
<<
25
;
flags
+=
1L
<<
25
;
# ifdef HAS_sprintf_void
# ifdef HAS_sprintf_void
flags
+=
1L
<<
26
;
flags
+=
1L
<<
26
;
# endif
# endif
# else
# else
# ifdef HAS_snprintf_void
# ifdef HAS_snprintf_void
flags
+=
1L
<<
26
;
flags
+=
1L
<<
26
;
# endif
# endif
# endif
# endif
#endif
#endif
...
@@ -181,6 +181,7 @@ void ZLIB_INTERNAL zmemzero(dest, len)
...
@@ -181,6 +181,7 @@ void ZLIB_INTERNAL zmemzero(dest, len)
}
}
#endif
#endif
#ifndef Z_SOLO
#ifdef SYS16BIT
#ifdef SYS16BIT
...
@@ -316,3 +317,5 @@ void ZLIB_INTERNAL zcfree (opaque, ptr)
...
@@ -316,3 +317,5 @@ void ZLIB_INTERNAL zcfree (opaque, ptr)
}
}
#endif
/* MY_ZCALLOC */
#endif
/* MY_ZCALLOC */
#endif
/* !Z_SOLO */
deps/zlib/zutil.h
View file @
9b87998c
/* zutil.h -- internal interface and configuration of the compression library
/* zutil.h -- internal interface and configuration of the compression library
* Copyright (C) 1995-201
0
Jean-loup Gailly.
* Copyright (C) 1995-201
3
Jean-loup Gailly.
* For conditions of distribution and use, see copyright notice in zlib.h
* For conditions of distribution and use, see copyright notice in zlib.h
*/
*/
...
@@ -13,7 +13,7 @@
...
@@ -13,7 +13,7 @@
#ifndef ZUTIL_H
#ifndef ZUTIL_H
#define ZUTIL_H
#define ZUTIL_H
#if
((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ)
#if
def HAVE_HIDDEN
# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
#else
#else
# define ZLIB_INTERNAL
# define ZLIB_INTERNAL
...
@@ -21,7 +21,7 @@
...
@@ -21,7 +21,7 @@
#include "zlib.h"
#include "zlib.h"
#if
def STDC
#if
defined(STDC) && !defined(Z_SOLO)
# if !(defined(_WIN32_WCE) && defined(_MSC_VER))
# if !(defined(_WIN32_WCE) && defined(_MSC_VER))
# include <stddef.h>
# include <stddef.h>
# endif
# endif
...
@@ -29,6 +29,10 @@
...
@@ -29,6 +29,10 @@
# include <stdlib.h>
# include <stdlib.h>
#endif
#endif
#ifdef Z_SOLO
typedef
long
ptrdiff_t
;
/* guess -- will be caught if guess is wrong */
#endif
#ifndef local
#ifndef local
# define local static
# define local static
#endif
#endif
...
@@ -40,13 +44,13 @@ typedef unsigned short ush;
...
@@ -40,13 +44,13 @@ typedef unsigned short ush;
typedef
ush
FAR
ushf
;
typedef
ush
FAR
ushf
;
typedef
unsigned
long
ulg
;
typedef
unsigned
long
ulg
;
extern
const
char
*
const
z_errmsg
[
10
];
/* indexed by 2-zlib_error */
extern
z_
const
char
*
const
z_errmsg
[
10
];
/* indexed by 2-zlib_error */
/* (size given to avoid silly warnings with Visual C++) */
/* (size given to avoid silly warnings with Visual C++) */
#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
#define ERR_RETURN(strm,err) \
#define ERR_RETURN(strm,err) \
return (strm->msg =
(char*)
ERR_MSG(err), (err))
return (strm->msg = ERR_MSG(err), (err))
/* To be used only when the state is known to be valid */
/* To be used only when the state is known to be valid */
/* common constants */
/* common constants */
...
@@ -78,16 +82,18 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
...
@@ -78,16 +82,18 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
# define OS_CODE 0x00
# define OS_CODE 0x00
# if defined(__TURBOC__) || defined(__BORLANDC__)
# ifndef Z_SOLO
# if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
# if defined(__TURBOC__) || defined(__BORLANDC__)
/* Allow compilation with ANSI keywords only enabled */
# if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
void
_Cdecl
farfree
(
void
*
block
);
/* Allow compilation with ANSI keywords only enabled */
void
*
_Cdecl
farmalloc
(
unsigned
long
nbytes
);
void
_Cdecl
farfree
(
void
*
block
);
# else
void
*
_Cdecl
farmalloc
(
unsigned
long
nbytes
);
# include <alloc.h>
# else
# include <alloc.h>
# endif
# else
/* MSC or DJGPP */
# include <malloc.h>
# endif
# endif
# else
/* MSC or DJGPP */
# include <malloc.h>
# endif
# endif
#endif
#endif
...
@@ -107,18 +113,20 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
...
@@ -107,18 +113,20 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
#ifdef OS2
#ifdef OS2
# define OS_CODE 0x06
# define OS_CODE 0x06
# if
def M_I86
# if
defined(M_I86) && !defined(Z_SOLO)
# include <malloc.h>
# include <malloc.h>
# endif
# endif
#endif
#endif
#if defined(MACOS) || defined(TARGET_OS_MAC)
#if defined(MACOS) || defined(TARGET_OS_MAC)
# define OS_CODE 0x07
# define OS_CODE 0x07
# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
# ifndef Z_SOLO
# include <unix.h>
/* for fdopen */
# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
# else
# include <unix.h>
/* for fdopen */
# ifndef fdopen
# else
# define fdopen(fd,mode) NULL
/* No fdopen() */
# ifndef fdopen
# define fdopen(fd,mode) NULL
/* No fdopen() */
# endif
# endif
# endif
# endif
# endif
#endif
#endif
...
@@ -153,14 +161,15 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
...
@@ -153,14 +161,15 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
# endif
# endif
#endif
#endif
#if defined(__BORLANDC__)
#if defined(__BORLANDC__)
&& !defined(MSDOS)
#pragma warn -8004
#pragma warn -8004
#pragma warn -8008
#pragma warn -8008
#pragma warn -8066
#pragma warn -8066
#endif
#endif
/* provide prototypes for these when building zlib without LFS */
/* provide prototypes for these when building zlib without LFS */
#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0
#if !defined(_WIN32) && \
(!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
ZEXTERN
uLong
ZEXPORT
adler32_combine64
OF
((
uLong
,
uLong
,
z_off_t
));
ZEXTERN
uLong
ZEXPORT
adler32_combine64
OF
((
uLong
,
uLong
,
z_off_t
));
ZEXTERN
uLong
ZEXPORT
crc32_combine64
OF
((
uLong
,
uLong
,
z_off_t
));
ZEXTERN
uLong
ZEXPORT
crc32_combine64
OF
((
uLong
,
uLong
,
z_off_t
));
#endif
#endif
...
@@ -177,42 +186,7 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
...
@@ -177,42 +186,7 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
/* functions */
/* functions */
#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
#if defined(pyr) || defined(Z_SOLO)
# ifndef HAVE_VSNPRINTF
# define HAVE_VSNPRINTF
# endif
#endif
#if defined(__CYGWIN__)
# ifndef HAVE_VSNPRINTF
# define HAVE_VSNPRINTF
# endif
#endif
#ifndef HAVE_VSNPRINTF
# ifdef MSDOS
/* vsnprintf may exist on some MS-DOS compilers (DJGPP?),
but for now we just assume it doesn't. */
# define NO_vsnprintf
# endif
# ifdef __TURBOC__
# define NO_vsnprintf
# endif
# ifdef WIN32
/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */
# if !defined(vsnprintf) && !defined(NO_vsnprintf)
# if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 )
# define vsnprintf _vsnprintf
# endif
# endif
# endif
# ifdef __SASC
# define NO_vsnprintf
# endif
#endif
#ifdef VMS
# define NO_vsnprintf
#endif
#if defined(pyr)
# define NO_MEMCPY
# define NO_MEMCPY
#endif
#endif
#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
...
@@ -261,14 +235,19 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
...
@@ -261,14 +235,19 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
# define Tracecv(c,x)
# define Tracecv(c,x)
#endif
#endif
#ifndef Z_SOLO
voidpf
ZLIB_INTERNAL
zcalloc
OF
((
voidpf
opaque
,
unsigned
items
,
voidpf
ZLIB_INTERNAL
zcalloc
OF
((
voidpf
opaque
,
unsigned
items
,
unsigned
size
));
unsigned
size
));
void
ZLIB_INTERNAL
zcfree
OF
((
voidpf
opaque
,
voidpf
ptr
));
void
ZLIB_INTERNAL
zcfree
OF
((
voidpf
opaque
,
voidpf
ptr
));
#endif
#define ZALLOC(strm, items, size) \
#define ZALLOC(strm, items, size) \
(*((strm)->zalloc))((strm)->opaque, (items), (size))
(*((strm)->zalloc))((strm)->opaque, (items), (size))
#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
/* Reverse the bytes in a 32-bit value */
#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
(((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
#endif
/* ZUTIL_H */
#endif
/* ZUTIL_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment