Blame view
lib/decompress.c
1.83 KB
b24413180 License cleanup: ... |
1 |
// SPDX-License-Identifier: GPL-2.0 |
889c92d21 bzip2/lzma: centr... |
2 3 4 5 6 7 8 9 10 11 |
/* * 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> |
3ebe12439 decompressors: ad... |
12 |
#include <linux/decompress/unxz.h> |
889c92d21 bzip2/lzma: centr... |
13 |
#include <linux/decompress/inflate.h> |
cacb246f8 Add LZO compressi... |
14 |
#include <linux/decompress/unlzo.h> |
e76e1fdfa lib: add support ... |
15 |
#include <linux/decompress/unlz4.h> |
4963bb2b8 lib: Add zstd sup... |
16 |
#include <linux/decompress/unzstd.h> |
889c92d21 bzip2/lzma: centr... |
17 18 19 |
#include <linux/types.h> #include <linux/string.h> |
33e2a4227 lib/decompress.c ... |
20 |
#include <linux/init.h> |
6aa7a29aa initramfs: debug ... |
21 |
#include <linux/printk.h> |
889c92d21 bzip2/lzma: centr... |
22 |
|
23a22d57a bzip2/lzma: compr... |
23 24 25 26 27 28 29 30 31 |
#ifndef CONFIG_DECOMPRESS_GZIP # define gunzip NULL #endif #ifndef CONFIG_DECOMPRESS_BZIP2 # define bunzip2 NULL #endif #ifndef CONFIG_DECOMPRESS_LZMA # define unlzma NULL #endif |
3ebe12439 decompressors: ad... |
32 33 34 |
#ifndef CONFIG_DECOMPRESS_XZ # define unxz NULL #endif |
cacb246f8 Add LZO compressi... |
35 36 37 |
#ifndef CONFIG_DECOMPRESS_LZO # define unlzo NULL #endif |
e76e1fdfa lib: add support ... |
38 39 40 |
#ifndef CONFIG_DECOMPRESS_LZ4 # define unlz4 NULL #endif |
4963bb2b8 lib: Add zstd sup... |
41 42 43 |
#ifndef CONFIG_DECOMPRESS_ZSTD # define unzstd NULL #endif |
23a22d57a bzip2/lzma: compr... |
44 |
|
33e2a4227 lib/decompress.c ... |
45 |
struct compress_format { |
889c92d21 bzip2/lzma: centr... |
46 47 48 |
unsigned char magic[2]; const char *name; decompress_fn decompressor; |
33e2a4227 lib/decompress.c ... |
49 |
}; |
6f9982bdd lib/decompress.c:... |
50 |
static const struct compress_format compressed_formats[] __initconst = { |
a060bfe03 lib/decompress.c:... |
51 52 |
{ {0x1f, 0x8b}, "gzip", gunzip }, { {0x1f, 0x9e}, "gzip", gunzip }, |
889c92d21 bzip2/lzma: centr... |
53 |
{ {0x42, 0x5a}, "bzip2", bunzip2 }, |
889c92d21 bzip2/lzma: centr... |
54 |
{ {0x5d, 0x00}, "lzma", unlzma }, |
3ebe12439 decompressors: ad... |
55 |
{ {0xfd, 0x37}, "xz", unxz }, |
cacb246f8 Add LZO compressi... |
56 |
{ {0x89, 0x4c}, "lzo", unlzo }, |
e76e1fdfa lib: add support ... |
57 |
{ {0x02, 0x21}, "lz4", unlz4 }, |
4963bb2b8 lib: Add zstd sup... |
58 |
{ {0x28, 0xb5}, "zstd", unzstd }, |
889c92d21 bzip2/lzma: centr... |
59 60 |
{ {0, 0}, NULL, NULL } }; |
d97b07c54 initramfs: suppor... |
61 |
decompress_fn __init decompress_method(const unsigned char *inbuf, long len, |
889c92d21 bzip2/lzma: centr... |
62 63 64 |
const char **name) { const struct compress_format *cf; |
5a09e6ce9 lib/decompress: s... |
65 66 67 |
if (len < 2) { if (name) *name = NULL; |
889c92d21 bzip2/lzma: centr... |
68 |
return NULL; /* Need at least this much... */ |
5a09e6ce9 lib/decompress: s... |
69 |
} |
889c92d21 bzip2/lzma: centr... |
70 |
|
6aa7a29aa initramfs: debug ... |
71 72 |
pr_debug("Compressed data magic: %#.2x %#.2x ", inbuf[0], inbuf[1]); |
e4aa7ca5a bzip2/lzma: don't... |
73 |
for (cf = compressed_formats; cf->name; cf++) { |
889c92d21 bzip2/lzma: centr... |
74 75 76 77 78 79 80 81 |
if (!memcmp(inbuf, cf->magic, 2)) break; } if (name) *name = cf->name; return cf->decompressor; } |