diff -Nur mc-4.6.2-pre1-old/edit/edit.c mc-4.6.2-pre1/edit/edit.c --- mc-4.6.2-pre1-old/edit/edit.c 2008-01-26 23:25:15.083107308 +0200 +++ mc-4.6.2-pre1/edit/edit.c 2008-01-26 23:25:23.067893437 +0200 @@ -187,6 +187,7 @@ } all_filters[] = { { "bzip2 -cd %s 2>&1", "bzip2 > %s", ".bz2" }, { "gzip -cd %s 2>&1", "gzip > %s", ".gz" }, + { "lzma -cd %s 2>&1", "lzma > %s", ".lzma"}, { "gzip -cd %s 2>&1", "gzip > %s", ".Z" } }; diff -Nur mc-4.6.2-pre1-old/lib/mc.ext.in mc-4.6.2-pre1/lib/mc.ext.in --- mc-4.6.2-pre1-old/lib/mc.ext.in 2008-01-26 23:25:15.094105636 +0200 +++ mc-4.6.2-pre1/lib/mc.ext.in 2008-01-26 23:25:23.069893132 +0200 @@ -106,7 +106,7 @@ ### Archives ### -# .tgz, .tpz, .tar.gz, .tar.z, .tar.Z, .ipk +# .tgz, .tpz, .tar.gz, .tar.z, .tar.Z, .tar.lzma, .ipk regex/\.t([gp]?z|ar\.g?[zZ])$|\.ipk$ Open=%cd %p#utar View=%view{ascii} gzip -dc %f 2>/dev/null | tar tvvf - @@ -119,6 +119,10 @@ Open=%cd %p#utar View=%view{ascii} bzip2 -dc %f 2>/dev/null | tar tvvf - +regex/\.tar\.lzma$ + Open=%cd %p#utar + View=%view{ascii} lzma -dc %f 2>/dev/null | tar tvvf - + # .tar.F - used in QNX regex/\.tar\.F$ # Open=%cd %p#utar @@ -589,6 +593,11 @@ Open=bzip -dc %f | %var{PAGER:more} View=%view{ascii} bzip -dc %f 2>/dev/null +# lzma +regex/\.([Ll][Zz][Mm][Aa])$ + Open=lzma -dc %f | %var{PAGER:more} + View=%view{ascii} lzma -dc %f 2>/dev/null + # compress type/^compress Open=gzip -dc %f | %var{PAGER:more} diff -Nur mc-4.6.2-pre1-old/src/util.c mc-4.6.2-pre1/src/util.c --- mc-4.6.2-pre1-old/src/util.c 2008-01-26 23:25:15.063110348 +0200 +++ mc-4.6.2-pre1/src/util.c 2008-01-26 23:25:55.623944164 +0200 @@ -1258,7 +1258,7 @@ enum compression_type get_compression_type (int fd) { - unsigned char magic[4]; + unsigned char magic[16]; /* Read the magic signature */ if (mc_read (fd, (char *) magic, 4) != 4) @@ -1302,6 +1302,29 @@ return COMPRESSION_BZIP2; } } + + /* LZMA files; both LZMA_Alone and LZMA utils formats. The LZMA_Alone + * format is used by the LZMA_Alone tool from LZMA SDK. The LZMA utils + * format is the default format of LZMA utils 4.32.1 and later. */ + if (magic[0] < 0xE1 || (magic[0] == 0xFF && magic[1] == 'L' && + magic[2] == 'Z' && magic[3] == 'M')) { + if (mc_read (fd, (char *) magic + 4, 9) == 9) { + /* LZMA utils format */ + if (magic[0] == 0xFF && magic[4] == 'A' && magic[5] == 0x00) + return COMPRESSION_LZMA; + /* The LZMA_Alone format has no magic bytes, thus we + * need to play a wizard. This can give false positives, + * thus the detection below should be removed when + * the newer LZMA utils format has got popular. */ + if (magic[0] < 0xE1 && magic[4] < 0x20 && + ((magic[10] == 0x00 && magic[11] == 0x00 && magic[12] == 0x00) || + (magic[5] == 0xFF && magic[6] == 0xFF && magic[7] == 0xFF && + magic[8] == 0xFF && magic[9] == 0xFF && magic[10] == 0xFF && + magic[11] == 0xFF && magic[12] == 0xFF))) + return COMPRESSION_LZMA; + } + } + return 0; } @@ -1312,6 +1335,7 @@ case COMPRESSION_GZIP: return "#ugz"; case COMPRESSION_BZIP: return "#ubz"; case COMPRESSION_BZIP2: return "#ubz2"; + case COMPRESSION_LZMA: return "#ulzma"; } /* Should never reach this place */ fprintf (stderr, "Fatal: decompress_extension called with an unknown argument\n"); diff -Nur mc-4.6.2-pre1-old/src/util.h mc-4.6.2-pre1/src/util.h --- mc-4.6.2-pre1-old/src/util.h 2008-01-26 23:25:15.063110348 +0200 +++ mc-4.6.2-pre1/src/util.h 2008-01-26 23:25:23.072892676 +0200 @@ -187,7 +187,8 @@ COMPRESSION_NONE, COMPRESSION_GZIP, COMPRESSION_BZIP, - COMPRESSION_BZIP2 + COMPRESSION_BZIP2, + COMPRESSION_LZMA }; /* Looks for ``magic'' bytes at the start of the VFS file to guess the diff -Nur mc-4.6.2-pre1-old/vfs/extfs/iso9660.in mc-4.6.2-pre1/vfs/extfs/iso9660.in --- mc-4.6.2-pre1-old/vfs/extfs/iso9660.in 2008-01-26 23:25:15.061110653 +0200 +++ mc-4.6.2-pre1/vfs/extfs/iso9660.in 2008-01-26 23:25:23.075892221 +0200 @@ -29,11 +29,12 @@ mcisofs_list () { # left as a reminder to implement compressed image support =) case "$1" in - *.bz2) MYCAT="bzip2 -dc";; - *.gz) MYCAT="gzip -dc";; - *.z) MYCAT="gzip -dc";; - *.Z) MYCAT="gzip -dc";; - *) MYCAT="cat";; + *.bz2) MYCAT="bzip2 -dc";; + *.gz) MYCAT="gzip -dc";; + *.z) MYCAT="gzip -dc";; + *.Z) MYCAT="gzip -dc";; + *.lzma) MYCAT="lzma -dc";; + *) MYCAT="cat";; esac $ISOINFO -l -i "$1" | @AWK@ ' diff -Nur mc-4.6.2-pre1-old/vfs/extfs/lslR.in mc-4.6.2-pre1/vfs/extfs/lslR.in --- mc-4.6.2-pre1-old/vfs/extfs/lslR.in 2008-01-26 23:25:15.061110653 +0200 +++ mc-4.6.2-pre1/vfs/extfs/lslR.in 2008-01-26 23:25:23.080891460 +0200 @@ -12,11 +12,12 @@ mclslRfs_list () { case "$1" in - *.bz2) MYCAT="bzip2 -dc";; - *.gz) MYCAT="gzip -dc";; - *.z) MYCAT="gzip -dc";; - *.Z) MYCAT="gzip -dc";; - *) MYCAT="cat";; + *.bz2) MYCAT="bzip2 -dc";; + *.gz) MYCAT="gzip -dc";; + *.z) MYCAT="gzip -dc";; + *.Z) MYCAT="gzip -dc";; + *.lzma) MYCAT="lzma -dc";; + *) MYCAT="cat";; esac $MYCAT "$1" | $AWK ' diff -Nur mc-4.6.2-pre1-old/vfs/extfs/patchfs.in mc-4.6.2-pre1/vfs/extfs/patchfs.in --- mc-4.6.2-pre1-old/vfs/extfs/patchfs.in 2008-01-26 23:25:15.061110653 +0200 +++ mc-4.6.2-pre1/vfs/extfs/patchfs.in 2008-01-26 23:25:23.081891308 +0200 @@ -13,6 +13,7 @@ # standard binaries my $bzip = 'bzip2'; +my $lzma = 'lzma'; my $gzip = 'gzip'; my $fileutil = 'file'; @@ -72,6 +73,8 @@ $_=`$fileutil $qfname`; if (/bzip/) { return "$bzip -dc $qfname"; + } elsif (/lzma/) { + return "$lzma -dc $qfname"; } elsif (/gzip/) { return "$gzip -dc $qfname"; } else { @@ -88,6 +91,8 @@ $_=`$fileutil $qfname`; if (/bzip/) { return "$bzip -c $sep $qfname"; + } elsif (/lzma/) { + return "$lzma -c $sep $qfname"; } elsif (/gzip/) { return "$gzip -c $sep $qfname"; } else { diff -Nur mc-4.6.2-pre1-old/vfs/extfs/sfs.ini mc-4.6.2-pre1/vfs/extfs/sfs.ini --- mc-4.6.2-pre1-old/vfs/extfs/sfs.ini 2008-01-26 23:25:15.062110500 +0200 +++ mc-4.6.2-pre1/vfs/extfs/sfs.ini 2008-01-26 23:25:23.084890853 +0200 @@ -10,6 +10,8 @@ ubz/1 bzip -d < %1 > %3 bz2/1 bzip2 < %1 > %3 ubz2/1 bzip2 -d < %1 > %3 +lzma/1 lzma < %1 > %3 +ulzma/1 lzma -d < %1 > %3 tar/1 tar cf %3 %1 tgz/1 tar czf %3 %1 uhtml/1 lynx -force_html -dump %1 > %3