bzip2/lzma: comprehensible error messages for missing decompressor
[safe/jmp/linux-2.6] / init / initramfs.c
index 76f4a01..9a7290e 100644 (file)
@@ -421,6 +421,8 @@ static char * __init unpack_to_rootfs(char *buf, unsigned len, int check_only)
 {
        int written;
        decompress_fn decompress;
+       const char *compress_name;
+       static __initdata char msg_buf[64];
 
        dry_run = check_only;
        header_buf = kmalloc(110, GFP_KERNEL);
@@ -449,10 +451,18 @@ static char * __init unpack_to_rootfs(char *buf, unsigned len, int check_only)
                        continue;
                }
                this_header = 0;
-               decompress = decompress_method(buf, len, NULL);
+               decompress = decompress_method(buf, len, &compress_name);
                if (decompress)
                        decompress(buf, len, NULL, flush_buffer, NULL,
                                   &my_inptr, error);
+               else if (compress_name) {
+                       if (!message) {
+                               snprintf(msg_buf, sizeof msg_buf,
+                                        "compression method %s not configured",
+                                        compress_name);
+                               message = msg_buf;
+                       }
+               }
                if (state != Reset)
                        error("junk in compressed archive");
                this_header = saved_offset + my_inptr;