bzip2/lzma/gzip: fix comments describing decompressor API

Fix and improve comments in decompress/generic.h that describe the
decompressor API.  Also remove an unused definition, and rename INBUF_LEN
in lib/decompress_inflate.c to conform to bzip2/lzma naming.

Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Phillip Lougher 2009-08-06 15:09:30 -07:00 committed by Linus Torvalds
parent 9c8a8228d0
commit daeb6b6fbe
2 changed files with 23 additions and 17 deletions

View File

@ -1,31 +1,37 @@
#ifndef DECOMPRESS_GENERIC_H
#define DECOMPRESS_GENERIC_H
/* Minimal chunksize to be read.
*Bzip2 prefers at least 4096
*Lzma prefers 0x10000 */
#define COMPR_IOBUF_SIZE 4096
typedef int (*decompress_fn) (unsigned char *inbuf, int len,
int(*fill)(void*, unsigned int),
int(*writebb)(void*, unsigned int),
unsigned char *output,
int(*flush)(void*, unsigned int),
unsigned char *outbuf,
int *posp,
void(*error)(char *x));
/* inbuf - input buffer
*len - len of pre-read data in inbuf
*fill - function to fill inbuf if empty
*writebb - function to write out outbug
*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
*
*If len != 0, the inbuf is initialized (with as much data), and fill
*should not be called
*If len = 0, the inbuf is allocated, but empty. Its size is IOBUF_SIZE
*fill should be called (repeatedly...) to read data, at most IOBUF_SIZE
*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).
*/
/* Utility routine to detect the decompression method */
decompress_fn decompress_method(const unsigned char *inbuf, int len,
const char **name);

View File

@ -25,7 +25,7 @@
#include <linux/decompress/mm.h>
#include <linux/slab.h>
#define INBUF_LEN (16*1024)
#define GZIP_IOBUF_SIZE (16*1024)
/* Included from initramfs et al code */
STATIC int INIT gunzip(unsigned char *buf, int len,
@ -55,7 +55,7 @@ STATIC int INIT gunzip(unsigned char *buf, int len,
if (buf)
zbuf = buf;
else {
zbuf = malloc(INBUF_LEN);
zbuf = malloc(GZIP_IOBUF_SIZE);
len = 0;
}
if (!zbuf) {
@ -77,7 +77,7 @@ STATIC int INIT gunzip(unsigned char *buf, int len,
}
if (len == 0)
len = fill(zbuf, INBUF_LEN);
len = fill(zbuf, GZIP_IOBUF_SIZE);
/* verify the gzip header */
if (len < 10 ||
@ -113,7 +113,7 @@ STATIC int INIT gunzip(unsigned char *buf, int len,
while (rc == Z_OK) {
if (strm->avail_in == 0) {
/* TODO: handle case where both pos and fill are set */
len = fill(zbuf, INBUF_LEN);
len = fill(zbuf, GZIP_IOBUF_SIZE);
if (len < 0) {
rc = -1;
error("read error");