-
Notifications
You must be signed in to change notification settings - Fork 8
/
zlib.c
87 lines (70 loc) · 1.98 KB
/
zlib.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*
* FwTool - Tool to encrypt/decrypt PS3 firmware's PKG files.
*
* Copyright (C) 2010 George Hotz (geohot)
* Copyright (C) 2010 Miguel Boton (waninkoko)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <errno.h>
#include <zlib.h>
#include "types.h"
s32 Zlib_Inflate(u8 *source, u32 inlen, u8 *dest, u32 *outlen)
{
z_stream strm;
s32 ret;
/* Setup stream */
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
strm.avail_in = inlen;
strm.next_in = source;
strm.avail_out = *outlen;
strm.next_out = dest;
/* Initialize inflate */
ret = inflateInit(&strm);
if (ret != Z_OK)
return ret;
/* Inflate data */
ret = inflate(&strm, Z_NO_FLUSH);
/* Output size */
*outlen -= strm.avail_out;
/* End inflate */
inflateEnd(&strm);
return (ret < 0) ? -EINVAL : 0;
}
s32 Zlib_Deflate(u8 *source, u32 inlen, u8 *dest, u32 *outlen)
{
z_stream strm;
s32 ret;
/* Setup stream */
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
strm.avail_in = inlen;
strm.next_in = source;
strm.avail_out = *outlen;
strm.next_out = dest;
/* Initialize deflate */
ret = deflateInit(&strm, Z_DEFAULT_COMPRESSION);
if (ret != Z_OK)
return ret;
/* Deflate data */
ret = deflate(&strm, Z_NO_FLUSH);
/* Output size */
*outlen -= strm.avail_out;
/* End deflate */
deflateEnd(&strm);
return (ret < 0) ? -EINVAL : 0;
}