Andrew Scull | b4b6d4a | 2019-01-02 15:54:55 +0000 | [diff] [blame^] | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
| 2 | #ifndef DECOMPRESS_GENERIC_H |
| 3 | #define DECOMPRESS_GENERIC_H |
| 4 | |
| 5 | typedef int (*decompress_fn) (unsigned char *inbuf, long len, |
| 6 | long (*fill)(void*, unsigned long), |
| 7 | long (*flush)(void*, unsigned long), |
| 8 | unsigned char *outbuf, |
| 9 | long *posp, |
| 10 | void(*error)(char *x)); |
| 11 | |
| 12 | /* inbuf - input buffer |
| 13 | *len - len of pre-read data in inbuf |
| 14 | *fill - function to fill inbuf when empty |
| 15 | *flush - function to write out outbuf |
| 16 | *outbuf - output buffer |
| 17 | *posp - if non-null, input position (number of bytes read) will be |
| 18 | * returned here |
| 19 | * |
| 20 | *If len != 0, inbuf should contain all the necessary input data, and fill |
| 21 | *should be NULL |
| 22 | *If len = 0, inbuf can be NULL, in which case the decompressor will allocate |
| 23 | *the input buffer. If inbuf != NULL it must be at least XXX_IOBUF_SIZE bytes. |
| 24 | *fill will be called (repeatedly...) to read data, at most XXX_IOBUF_SIZE |
| 25 | *bytes should be read per call. Replace XXX with the appropriate decompressor |
| 26 | *name, i.e. LZMA_IOBUF_SIZE. |
| 27 | * |
| 28 | *If flush = NULL, outbuf must be large enough to buffer all the expected |
| 29 | *output. If flush != NULL, the output buffer will be allocated by the |
| 30 | *decompressor (outbuf = NULL), and the flush function will be called to |
| 31 | *flush the output buffer at the appropriate time (decompressor and stream |
| 32 | *dependent). |
| 33 | */ |
| 34 | |
| 35 | |
| 36 | /* Utility routine to detect the decompression method */ |
| 37 | decompress_fn decompress_method(const unsigned char *inbuf, long len, |
| 38 | const char **name); |
| 39 | |
| 40 | #endif |