Loading init/do_mounts_rd.c +35 −47 Original line number Diff line number Diff line Loading @@ -49,6 +49,24 @@ static int __init crd_load(int in_fd, int out_fd, decompress_fn deco); * cramfs * gzip */ static const struct compress_format { unsigned char magic[2]; const char *name; decompress_fn decompressor; } compressed_formats[] = { #ifdef CONFIG_RD_GZIP { {037, 0213}, "gzip", gunzip }, { {037, 0236}, "gzip", gunzip }, #endif #ifdef CONFIG_RD_BZIP2 { {0x42, 0x5a}, "bzip2", bunzip2 }, #endif #ifdef CONFIG_RD_LZMA { {0x5d, 0x00}, "lzma", unlzma }, #endif { {0, 0}, NULL, NULL } }; static int __init identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor) { Loading @@ -59,6 +77,7 @@ identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor) struct cramfs_super *cramfsb; int nblocks = -1; unsigned char *buf; const struct compress_format *cf; buf = kmalloc(size, GFP_KERNEL); if (!buf) Loading @@ -71,52 +90,21 @@ identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor) memset(buf, 0xe5, size); /* * Read block 0 to test for gzipped kernel * Read block 0 to test for compressed kernel */ sys_lseek(fd, start_block * BLOCK_SIZE, 0); sys_read(fd, buf, size); #ifdef CONFIG_RD_GZIP /* * If it matches the gzip magic numbers, return 0 */ if (buf[0] == 037 && ((buf[1] == 0213) || (buf[1] == 0236))) { for (cf = compressed_formats; cf->decompressor; cf++) { if (buf[0] == cf->magic[0] && buf[1] == cf->magic[1]) { printk(KERN_NOTICE "RAMDISK: Compressed image found at block %d\n", start_block); *decompressor = gunzip; "RAMDISK: %s image found at block %d\n", cf->name, start_block); *decompressor = cf->decompressor; nblocks = 0; goto done; } #endif #ifdef CONFIG_RD_BZIP2 /* * If it matches the bzip2 magic numbers, return -1 */ if (buf[0] == 0x42 && (buf[1] == 0x5a)) { printk(KERN_NOTICE "RAMDISK: Bzipped image found at block %d\n", start_block); *decompressor = bunzip2; nblocks = 0; goto done; } #endif #ifdef CONFIG_RD_LZMA /* * If it matches the lzma magic numbers, return -1 */ if (buf[0] == 0x5d && (buf[1] == 0x00)) { printk(KERN_NOTICE "RAMDISK: Lzma image found at block %d\n", start_block); *decompressor = unlzma; nblocks = 0; goto done; } #endif /* romfs is at block zero too */ if (romfsb->word0 == ROMSB_WORD0 && Loading Loading
init/do_mounts_rd.c +35 −47 Original line number Diff line number Diff line Loading @@ -49,6 +49,24 @@ static int __init crd_load(int in_fd, int out_fd, decompress_fn deco); * cramfs * gzip */ static const struct compress_format { unsigned char magic[2]; const char *name; decompress_fn decompressor; } compressed_formats[] = { #ifdef CONFIG_RD_GZIP { {037, 0213}, "gzip", gunzip }, { {037, 0236}, "gzip", gunzip }, #endif #ifdef CONFIG_RD_BZIP2 { {0x42, 0x5a}, "bzip2", bunzip2 }, #endif #ifdef CONFIG_RD_LZMA { {0x5d, 0x00}, "lzma", unlzma }, #endif { {0, 0}, NULL, NULL } }; static int __init identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor) { Loading @@ -59,6 +77,7 @@ identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor) struct cramfs_super *cramfsb; int nblocks = -1; unsigned char *buf; const struct compress_format *cf; buf = kmalloc(size, GFP_KERNEL); if (!buf) Loading @@ -71,52 +90,21 @@ identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor) memset(buf, 0xe5, size); /* * Read block 0 to test for gzipped kernel * Read block 0 to test for compressed kernel */ sys_lseek(fd, start_block * BLOCK_SIZE, 0); sys_read(fd, buf, size); #ifdef CONFIG_RD_GZIP /* * If it matches the gzip magic numbers, return 0 */ if (buf[0] == 037 && ((buf[1] == 0213) || (buf[1] == 0236))) { for (cf = compressed_formats; cf->decompressor; cf++) { if (buf[0] == cf->magic[0] && buf[1] == cf->magic[1]) { printk(KERN_NOTICE "RAMDISK: Compressed image found at block %d\n", start_block); *decompressor = gunzip; "RAMDISK: %s image found at block %d\n", cf->name, start_block); *decompressor = cf->decompressor; nblocks = 0; goto done; } #endif #ifdef CONFIG_RD_BZIP2 /* * If it matches the bzip2 magic numbers, return -1 */ if (buf[0] == 0x42 && (buf[1] == 0x5a)) { printk(KERN_NOTICE "RAMDISK: Bzipped image found at block %d\n", start_block); *decompressor = bunzip2; nblocks = 0; goto done; } #endif #ifdef CONFIG_RD_LZMA /* * If it matches the lzma magic numbers, return -1 */ if (buf[0] == 0x5d && (buf[1] == 0x00)) { printk(KERN_NOTICE "RAMDISK: Lzma image found at block %d\n", start_block); *decompressor = unlzma; nblocks = 0; goto done; } #endif /* romfs is at block zero too */ if (romfsb->word0 == ROMSB_WORD0 && Loading