# HG changeset patch # User Pascal Bellard # Date 1262549705 -3600 # Node ID 9f7f4d06661fa8a6ce13e4111bd72475f6cacb25 # Parent 335b02e4e8c8b3a93a9e58bc23e1387e601c1c65 squashfs: version 3 lzma support diff -r 335b02e4e8c8 -r 9f7f4d06661f squashfs/stuff/lzma.u --- a/squashfs/stuff/lzma.u Sun Jan 03 17:58:12 2010 +0000 +++ b/squashfs/stuff/lzma.u Sun Jan 03 21:15:05 2010 +0100 @@ -2233,3 +2233,43 @@ #include #include #include + +--- squashfs-4.0/squashfs-tools/squashfs_fs.h ++++ squashfs-4.0/squashfs-tools/squashfs_fs.h +@@ -28,6 +28,8 @@ + #define SQUASHFS_MINOR 0 + #define SQUASHFS_MAGIC 0x73717368 + #define SQUASHFS_MAGIC_SWAP 0x68737173 ++#define SQUASHFS_MAGIC_OLD_LZMA 0x71736873 ++#define SQUASHFS_MAGIC_OLD_LZMA_SWAP 0x73687371 + #define SQUASHFS_START 0 + + /* size of metadata (inode and directory) blocks */ + +--- squashfs-4.0/squashfs-tools/unsquashfs.c ++++ squashfs-4.0/squashfs-tools/unsquashfs.c +@@ -1473,8 +1473,10 @@ + * Check it is a SQUASHFS superblock + */ + swap = 0; +- if(sBlk_3.s_magic != SQUASHFS_MAGIC) { +- if(sBlk_3.s_magic == SQUASHFS_MAGIC_SWAP) { ++ if(sBlk_3.s_magic != SQUASHFS_MAGIC && ++ sBlk_3.s_magic != SQUASHFS_MAGIC_OLD_LZMA) { ++ if(sBlk_3.s_magic == SQUASHFS_MAGIC_SWAP || ++ sBlk_3.s_magic == SQUASHFS_MAGIC_OLD_LZMA_SWAP) { + squashfs_super_block_3 sblk; + ERROR("Reading a different endian SQUASHFS filesystem " + "on %s\n", source); +@@ -1552,7 +1554,10 @@ + * 1.x, 2.x and 3.x filesystems use gzip compression. Gzip is always + * suppported. + */ +- comp = lookup_compressor("gzip"); ++ if (sBlk_3.s_magic == SQUASHFS_MAGIC_OLD_LZMA || ++ sBlk_3.s_magic == SQUASHFS_MAGIC_OLD_LZMA_SWAP) ++ comp = lookup_compressor("lzma"); ++ else comp = lookup_compressor("gzip"); + return TRUE; + + failed_mount: