Blame view
lib/decompress.c
1.1 KB
889c92d21 bzip2/lzma: centr... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/* * decompress.c * * Detect the decompression method based on magic number */ #include <linux/decompress/generic.h> #include <linux/decompress/bunzip2.h> #include <linux/decompress/unlzma.h> #include <linux/decompress/inflate.h> #include <linux/types.h> #include <linux/string.h> |
23a22d57a bzip2/lzma: compr... |
15 16 17 18 19 20 21 22 23 |
#ifndef CONFIG_DECOMPRESS_GZIP # define gunzip NULL #endif #ifndef CONFIG_DECOMPRESS_BZIP2 # define bunzip2 NULL #endif #ifndef CONFIG_DECOMPRESS_LZMA # define unlzma NULL #endif |
889c92d21 bzip2/lzma: centr... |
24 25 26 27 28 |
static const struct compress_format { unsigned char magic[2]; const char *name; decompress_fn decompressor; } compressed_formats[] = { |
889c92d21 bzip2/lzma: centr... |
29 30 |
{ {037, 0213}, "gzip", gunzip }, { {037, 0236}, "gzip", gunzip }, |
889c92d21 bzip2/lzma: centr... |
31 |
{ {0x42, 0x5a}, "bzip2", bunzip2 }, |
889c92d21 bzip2/lzma: centr... |
32 |
{ {0x5d, 0x00}, "lzma", unlzma }, |
889c92d21 bzip2/lzma: centr... |
33 34 35 36 37 38 39 40 41 42 |
{ {0, 0}, NULL, NULL } }; decompress_fn decompress_method(const unsigned char *inbuf, int len, const char **name) { const struct compress_format *cf; if (len < 2) return NULL; /* Need at least this much... */ |
e4aa7ca5a bzip2/lzma: don't... |
43 |
for (cf = compressed_formats; cf->name; cf++) { |
889c92d21 bzip2/lzma: centr... |
44 45 46 47 48 49 50 51 |
if (!memcmp(inbuf, cf->magic, 2)) break; } if (name) *name = cf->name; return cf->decompressor; } |