Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
xtensa
boot
lib
zmem.c
Go to the documentation of this file.
1
#include <
linux/zlib.h
>
2
3
/* bits taken from ppc */
4
5
extern
void
*
avail_ram
, *
end_avail
;
6
7
void
exit
(
void
)
8
{
9
for
(;;);
10
}
11
12
void
*
zalloc
(
unsigned
size
)
13
{
14
void
*
p
=
avail_ram
;
15
16
size = (size + 7) & -8;
17
avail_ram
+=
size
;
18
if
(
avail_ram
>
end_avail
) {
19
//puts("oops... out of memory\n");
20
//pause();
21
exit
();
22
}
23
return
p
;
24
}
25
26
#define HEAD_CRC 2
27
#define EXTRA_FIELD 4
28
#define ORIG_NAME 8
29
#define COMMENT 0x10
30
#define RESERVED 0xe0
31
32
#define DEFLATED 8
33
34
void
gunzip
(
void
*
dst
,
int
dstlen,
unsigned
char
*
src
,
int
*lenp)
35
{
36
z_stream
s
;
37
int
r
,
i
,
flags
;
38
39
/* skip header */
40
i = 10;
41
flags = src[3];
42
if
(src[2] !=
DEFLATED
|| (flags &
RESERVED
) != 0) {
43
//puts("bad gzipped data\n");
44
exit
();
45
}
46
if
((flags &
EXTRA_FIELD
) != 0)
47
i = 12 + src[10] + (src[11] << 8);
48
if
((flags &
ORIG_NAME
) != 0)
49
while
(src[i++] != 0)
50
;
51
if
((flags &
COMMENT
) != 0)
52
while
(src[i++] != 0)
53
;
54
if
((flags &
HEAD_CRC
) != 0)
55
i += 2;
56
if
(i >= *lenp) {
57
//puts("gunzip: ran out of data in header\n");
58
exit
();
59
}
60
61
s.
workspace
=
zalloc
(
zlib_inflate_workspacesize
());
62
r =
zlib_inflateInit2
(&s, -
MAX_WBITS
);
63
if
(r !=
Z_OK
) {
64
//puts("inflateInit2 returned "); puthex(r); puts("\n");
65
exit
();
66
}
67
s.
next_in
= src +
i
;
68
s.
avail_in
= *lenp -
i
;
69
s.
next_out
=
dst
;
70
s.
avail_out
= dstlen;
71
r =
zlib_inflate
(&s,
Z_FINISH
);
72
if
(r !=
Z_OK
&& r !=
Z_STREAM_END
) {
73
//puts("inflate returned "); puthex(r); puts("\n");
74
exit
();
75
}
76
*lenp = s.
next_out
- (
unsigned
char
*) dst;
77
zlib_inflateEnd
(&s);
78
}
79
Generated on Thu Jan 10 2013 13:22:10 for Linux Kernel by
1.8.2