Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
lib
decompress.c
Go to the documentation of this file.
1
/*
2
* decompress.c
3
*
4
* Detect the decompression method based on magic number
5
*/
6
7
#include <
linux/decompress/generic.h
>
8
9
#include <
linux/decompress/bunzip2.h
>
10
#include <
linux/decompress/unlzma.h
>
11
#include <
linux/decompress/unxz.h
>
12
#include <
linux/decompress/inflate.h
>
13
#include <
linux/decompress/unlzo.h
>
14
15
#include <linux/types.h>
16
#include <linux/string.h>
17
#include <
linux/init.h
>
18
19
#ifndef CONFIG_DECOMPRESS_GZIP
20
# define gunzip NULL
21
#endif
22
#ifndef CONFIG_DECOMPRESS_BZIP2
23
# define bunzip2 NULL
24
#endif
25
#ifndef CONFIG_DECOMPRESS_LZMA
26
# define unlzma NULL
27
#endif
28
#ifndef CONFIG_DECOMPRESS_XZ
29
# define unxz NULL
30
#endif
31
#ifndef CONFIG_DECOMPRESS_LZO
32
# define unlzo NULL
33
#endif
34
35
struct
compress_format
{
36
unsigned
char
magic
[2];
37
const
char
*
name
;
38
decompress_fn
decompressor
;
39
};
40
41
static
const
struct
compress_format
compressed_formats[]
__initdata
= {
42
{ {037, 0213},
"gzip"
,
gunzip
},
43
{ {037, 0236},
"gzip"
,
gunzip
},
44
{ {0x42, 0x5a},
"bzip2"
,
bunzip2
},
45
{ {0x5d, 0x00},
"lzma"
,
unlzma
},
46
{ {0xfd, 0x37},
"xz"
,
unxz
},
47
{ {0x89, 0x4c},
"lzo"
,
unlzo
},
48
{ {0, 0},
NULL
,
NULL
}
49
};
50
51
decompress_fn
__init
decompress_method
(
const
unsigned
char
*
inbuf
,
int
len,
52
const
char
**
name
)
53
{
54
const
struct
compress_format
*
cf
;
55
56
if
(len < 2)
57
return
NULL
;
/* Need at least this much... */
58
59
for
(cf = compressed_formats; cf->
name
; cf++) {
60
if
(!
memcmp
(inbuf, cf->
magic
, 2))
61
break
;
62
63
}
64
if
(name)
65
*name = cf->
name
;
66
return
cf->
decompressor
;
67
}
Generated on Thu Jan 10 2013 12:54:51 for Linux Kernel by
1.8.2