Add LZMA_DEFAULT_MAGIC support --- busybox-1.17.1/include/unarchive.h +++ busybox-1.17.1/include/unarchive.h @@ -9,6 +9,8 @@ COMPRESS_MAGIC = 0x1f9d, GZIP_MAGIC = 0x1f8b, BZIP2_MAGIC = 'B' * 256 + 'Z', + /* lzma default options: lc=3 lp=0 pb=2, historic % 256 == 0 */ + LZMA_DEFAULT_MAGIC = 0x5d00, /* .xz signature: 0xfd, '7', 'z', 'X', 'Z', 0x00 */ /* More info at: http://tukaani.org/xz/xz-file-format.txt */ XZ_MAGIC1 = 0xfd * 256 + '7', @@ -20,6 +22,8 @@ COMPRESS_MAGIC = 0x9d1f, GZIP_MAGIC = 0x8b1f, BZIP2_MAGIC = 'Z' * 256 + 'B', + /* lzma default options: lc=3 lp=0 pb=2, historic % 256 == 0 */ + LZMA_DEFAULT_MAGIC = 0x5d, XZ_MAGIC1 = '7' * 256 + 0xfd, XZ_MAGIC2 = ((0 * 256 + 'Z') * 256 + 'X') * 256 + 'z', XZ_MAGIC1a = (('X' * 256 + 'z') * 256 + '7') * 256 + 0xfd, --- busybox-1.17.1/libbb/read_printf.c +++ busybox-1.17.1/libbb/read_printf.c @@ -286,6 +286,17 @@ # endif goto found_magic; } + if (ENABLE_FEATURE_SEAMLESS_LZMA + && magic.b16[0] == LZMA_DEFAULT_MAGIC + ) { +# if BB_MMU + xformer = unpack_lzma_stream; + xlseek(fd, offset, SEEK_CUR); +# else + xformer_prog = "unlzma"; +# endif + goto found_magic; + } if (ENABLE_FEATURE_SEAMLESS_XZ && magic.b16[0] == XZ_MAGIC1 ) { @@ -342,7 +353,8 @@ /* .lzma has no header/signature, just trust it */ open_transformer(fd, unpack_lzma_stream, "unlzma"); else - if ((ENABLE_FEATURE_SEAMLESS_GZ && strcmp(sfx, "gz") == 0) + if (((ENABLE_FEATURE_SEAMLESS_GZ|ENABLE_FEATURE_SEAMLESS_LZMA) + && strcmp(sfx, "gz") == 0) || (ENABLE_FEATURE_SEAMLESS_BZ2 && strcmp(sfx, "bz2") == 0) || (ENABLE_FEATURE_SEAMLESS_XZ && strcmp(sfx, "xz") == 0) ) {