1 #include <xen/init.h>
2 #include <xen/lib.h>
3 #include <xen/string.h>
4 #include <xen/decompress.h>
5 
error(const char * msg)6 static void __init error(const char *msg)
7 {
8     printk("%s\n", msg);
9 }
10 
decompress(void * inbuf,unsigned int len,void * outbuf)11 int __init decompress(void *inbuf, unsigned int len, void *outbuf)
12 {
13 #if 0 /* Not needed here yet. */
14     if ( len >= 2 &&
15          (!memcmp(inbuf, "\037\213", 2) || !memcmp(inbuf, "\037\236", 2)) )
16         return gunzip(inbuf, len, NULL, NULL, outbuf, NULL, error);
17 #endif
18 
19     if ( len >= 3 && !memcmp(inbuf, "\x42\x5a\x68", 3) )
20         return bunzip2(inbuf, len, NULL, NULL, outbuf, NULL, error);
21 
22     if ( len >= 6 && !memcmp(inbuf, "\3757zXZ", 6) )
23         return unxz(inbuf, len, NULL, NULL, outbuf, NULL, error);
24 
25     if ( len >= 2 && !memcmp(inbuf, "\135\000", 2) )
26         return unlzma(inbuf, len, NULL, NULL, outbuf, NULL, error);
27 
28     if ( len >= 5 && !memcmp(inbuf, "\x89LZO", 5) )
29         return unlzo(inbuf, len, NULL, NULL, outbuf, NULL, error);
30 
31     if ( len >= 2 && !memcmp(inbuf, "\x02\x21", 2) )
32 	return unlz4(inbuf, len, NULL, NULL, outbuf, NULL, error);
33 
34     return 1;
35 }
36