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
|
#ifndef __XEN_GENERIC_H
#define __XEN_GENERIC_H
typedef int decompress_fn(unsigned char *inbuf, unsigned int len,
int (*fill)(void*, unsigned int),
int (*flush)(void*, unsigned int),
unsigned char *outbuf, unsigned int *posp,
void (*error)(const char *x));
/* inbuf - input buffer
* len - len of pre-read data in inbuf
* fill - function to fill inbuf when empty
* flush - function to write out outbuf
* outbuf - output buffer
* posp - if non-null, input position (number of bytes read) will be
* returned here
* error - error reporting function
*
* If len != 0, inbuf should contain all the necessary input data, and fill
* should be NULL
* If len = 0, inbuf can be NULL, in which case the decompressor will allocate
* the input buffer. If inbuf != NULL it must be at least XXX_IOBUF_SIZE bytes.
* fill will be called (repeatedly...) to read data, at most XXX_IOBUF_SIZE
* bytes should be read per call. Replace XXX with the appropriate decompressor
* name, i.e. LZMA_IOBUF_SIZE.
*
* If flush = NULL, outbuf must be large enough to buffer all the expected
* output. If flush != NULL, the output buffer will be allocated by the
* decompressor (outbuf = NULL), and the flush function will be called to
* flush the output buffer at the appropriate time (decompressor and stream
* dependent).
*/
decompress_fn bunzip2, unxz, unlzma, unlzo, unlz4;
int decompress(void *inbuf, unsigned int len, void *outbuf);
#endif
|