/* * decompress.c * * Detect the decompression method based on magic number */ #include #include #include #include #include #include #include #include #include #include #include #ifndef CONFIG_DECOMPRESS_GZIP # define gunzip NULL #endif #ifndef CONFIG_DECOMPRESS_BZIP2 # define bunzip2 NULL #endif #ifndef CONFIG_DECOMPRESS_LZMA # define unlzma NULL #endif #ifndef CONFIG_DECOMPRESS_XZ # define unxz NULL #endif #ifndef CONFIG_DECOMPRESS_LZO # define unlzo NULL #endif #ifndef CONFIG_DECOMPRESS_LZ4 # define unlz4 NULL #endif struct compress_format { unsigned char magic[2]; const char *name; decompress_fn decompressor; }; static const struct compress_format compressed_formats[] __initconst = { { {0x1f, 0x8b}, "gzip", gunzip }, { {0x1f, 0x9e}, "gzip", gunzip }, { {0x42, 0x5a}, "bzip2", bunzip2 }, { {0x5d, 0x00}, "lzma", unlzma }, { {0xfd, 0x37}, "xz", unxz }, { {0x89, 0x4c}, "lzo", unlzo }, { {0x02, 0x21}, "lz4", unlz4 }, { {0, 0}, NULL, NULL } }; decompress_fn __init decompress_method(const unsigned char *inbuf, long len, const char **name) { const struct compress_format *cf; if (len < 2) { if (name) *name = NULL; return NULL; /* Need at least this much... */ } pr_debug("Compressed data magic: %#.2x %#.2x\n", inbuf[0], inbuf[1]); for (cf = compressed_formats; cf->name; cf++) { if (!memcmp(inbuf, cf->magic, 2)) break; } if (name) *name = cf->name; return cf->decompressor; } '>refslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-01-24 16:54:39 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2017-01-24 16:54:39 -0800
commit883af14e67e8b8702b5560aa64c888c0cd0bd66c (patch)
tree74e3a6b53f5fad9f7848ab1b9f6921b7012940a4 /sound/pcmcia/pdaudiocf/pdaudiocf.c
parent0263d4ebd94b36280608e296cba39b924b6e832b (diff)
parentaab45453ff5c77200c6da4ac909f7a4392aed17e (diff)
Merge branch 'akpm' (patches from Andrew)
Merge fixes from Andrew Morton: "26 fixes" * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (26 commits) MAINTAINERS: add Dan Streetman to zbud maintainers MAINTAINERS: add Dan Streetman to zswap maintainers mm: do not export ioremap_page_range symbol for external module mn10300: fix build error of missing fpu_save() romfs: use different way to generate fsid for BLOCK or MTD frv: add missing atomic64 operations mm, page_alloc: fix premature OOM when racing with cpuset mems update mm, page_alloc: move cpuset seqcount checking to slowpath mm, page_alloc: fix fast-path race with cpuset update or removal mm, page_alloc: fix check for NULL preferred_zone kernel/panic.c: add missing \n fbdev: color map copying bounds checking frv: add atomic64_add_unless() mm/mempolicy.c: do not put mempolicy before using its nodemask radix-tree: fix private list warnings Documentation/filesystems/proc.txt: add VmPin mm, memcg: do not retry precharge charges proc: add a schedule point in proc_pid_readdir() mm: alloc_contig: re-allow CMA to compact FS pages mm/slub.c: trace free objects at KERN_INFO ...
Diffstat (limited to 'sound/pcmcia/pdaudiocf/pdaudiocf.c')