Merge branch '176_lzma'

This commit is contained in:
Mikhail S. Pobolovets 2009-02-21 12:23:50 +02:00
commit da3b76b8d7
10 changed files with 59 additions and 4 deletions

View File

@ -151,6 +151,7 @@
* vfs/extfs/uarc.in:
* vfs/extfs/uc1541.in: added support for historic archive formats
(patch provided by jpelletier)
* merged in lzma patch from mandriva
2009-01-19 Patrick Winnertz <winnie@debian.org>

View File

@ -182,6 +182,7 @@ edit_load_file_fast (WEdit *edit, const char *filename)
static const struct edit_filters {
const char *read, *write, *extension;
} all_filters[] = {
{ "lzma -cd %s 2>&1", "lzma > %s", ".lzma" },
{ "bzip2 -cd %s 2>&1", "bzip2 > %s", ".bz2" },
{ "gzip -cd %s 2>&1", "gzip > %s", ".gz" },
{ "gzip -cd %s 2>&1", "gzip > %s", ".Z" }

View File

@ -119,6 +119,11 @@ regex/\.t(ar\.bz2|bz|b2)$
Open=%cd %p#utar
View=%view{ascii} bzip2 -dc %f 2>/dev/null | tar tvvf -
# .tar.lzma, .tlz
regex/\.t(ar\.lzma|lz)$
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
@ -298,6 +303,10 @@ regex/([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.bz2$
Open=case %d/%f in */log/*|*/logs/*) bzip2 -dc %f ;; *) bzip2 -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac | %var{PAGER:more}
View=%view{ascii,nroff} case %d/%f in */log/*|*/logs/*) bzip2 -dc %f ;; *) bzip2 -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac
regex/([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.lzma$
Open=case %d/%f in */log/*|*/logs/*) lzma -dc %f ;; *) lzma -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac | %var{PAGER:more}
View=%view{ascii,nroff} case %d/%f in */log/*|*/logs/*) lzma -dc %f ;; *) lzma -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac
### Images ###
@ -564,6 +573,11 @@ type/^compress
Open=gzip -dc %f | %var{PAGER:more}
View=%view{ascii} gzip -dc %f 2>/dev/null
# lzma
regex/\.lzma$
Open=lzma -dc %f | %var{PAGER:more}
View=%view{ascii} lzma -dc %f 2>/dev/null
### Default ###

View File

@ -948,7 +948,7 @@ get_current_wd (char *buffer, int size)
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)
@ -992,6 +992,31 @@ get_compression_type (int fd)
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;
}
@ -1002,6 +1027,7 @@ decompress_extension (int type)
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");

View File

@ -181,7 +181,8 @@ enum compression_type {
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

View File

@ -29,6 +29,7 @@ test_iso () {
mcisofs_list () {
# left as a reminder to implement compressed image support =)
case "$1" in
*.lzma) MYCAT="lzma -dc";;
*.bz2) MYCAT="bzip2 -dc";;
*.gz) MYCAT="gzip -dc";;
*.z) MYCAT="gzip -dc";;

View File

@ -12,6 +12,7 @@ AWK=@AWK@
mclslRfs_list () {
case "$1" in
*.lzma) MYCAT="lzma -dc";;
*.bz2) MYCAT="bzip2 -dc";;
*.gz) MYCAT="gzip -dc";;
*.z) MYCAT="gzip -dc";;

View File

@ -7,6 +7,7 @@ use bytes;
$zcat="zcat"; # gunzip to stdout
$bzcat="bzip2 -dc"; # bunzip2 to stdout
$lzcat="lzma -dc"; # unlzma to stdout
$file="file"; # "file" command
$TZ='GMT'; # default timezone (for Date module)
@ -182,6 +183,8 @@ if (/gzip/) {
exit 1 unless (open IN, "$zcat $mbox_qname|");
} elsif (/bzip/) {
exit 1 unless (open IN, "$bzcat $mbox_qname|");
} elsif (/lzma/) {
exit 1 unless (open IN, "$lzcat $mbox_qname|");
} else {
exit 1 unless (open IN, "<$mbox_name");
}

View File

@ -12,6 +12,7 @@ use POSIX;
use File::Temp 'tempfile';
# standard binaries
my $lzma = 'lzma';
my $bzip = 'bzip2';
my $gzip = 'gzip';
my $fileutil = 'file';
@ -70,7 +71,9 @@ sub myin
my ($qfname)=(quotemeta $_[0]);
$_=`$fileutil $qfname`;
if (/bzip/) {
if (/lzma/) {
return "$lzma -dc $qfname";
} elsif (/bzip/) {
return "$bzip -dc $qfname";
} elsif (/gzip/) {
return "$gzip -dc $qfname";
@ -86,7 +89,9 @@ sub myout
my ($sep) = $append ? '>>' : '>';
$_=`$fileutil $qfname`;
if (/bzip/) {
if (/lzma/) {
return "$lzma -c $sep $qfname";
} elsif (/bzip/) {
return "$bzip -c $sep $qfname";
} elsif (/gzip/) {
return "$gzip -c $sep $qfname";

View File

@ -10,6 +10,8 @@ bz/1 bzip < %1 > %3
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