blob: 3f07b9472a878845ea3cf05a2003fe08b8b7cfc6 (
plain)
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
|
#include "internal.h"
int
flate·write(flate·Writer *wtr, int sz, int n, void *buf)
{
int r;
int err;
flate·Writer zwtr;
zwtr = *wtr;
zwtr.next_out = buf;
DEFLATE:
zwtr.avail_out = n*sz;
err = deflate(&zwtr.z, Z_NO_FLUSH);
switch (err) {
case Z_STREAM_END:
return n;
case Z_OK:
r = (zwtr.next_out - (ubyte*)buf)/sz;
n -= r;
if (!n) {
return r;
}
buf += n;
goto DEFLATE;
case Z_STREAM_ERROR:
errorf("zlib: bad input");
goto ERROR;
case Z_BUF_ERROR:
if (!zwtr.avail_in) {
zwtr.avail_in += zwtr.wtr.write(zwtr.impl, 1, arrlen(zwtr.buf), buf);
if (!zwtr.avail_in) {
errorf("reader: failed read");
goto ERROR;
}
goto DEFLATE;
}
}
return 0;
ERROR:
errorf("zlib: %s", zwtr.msg);
return -1;
}
|