Added XZ compression support. Signed-off-by: xgizzmo <xgizzmo@slackbuilds.org>
Signed-off-by: Slava Zanko <slavazanko@gmail.com>
Этот коммит содержится в:
родитель
121ff2965c
Коммит
24ca27fe30
@ -321,6 +321,7 @@ edit_load_file_fast (WEdit *edit, const char *filename)
|
|||||||
static const struct edit_filters {
|
static const struct edit_filters {
|
||||||
const char *read, *write, *extension;
|
const char *read, *write, *extension;
|
||||||
} all_filters[] = {
|
} all_filters[] = {
|
||||||
|
{ "xz -cd %s 2>&1", "xz > %s", ".xz" },
|
||||||
{ "lzma -cd %s 2>&1", "lzma > %s", ".lzma" },
|
{ "lzma -cd %s 2>&1", "lzma > %s", ".lzma" },
|
||||||
{ "bzip2 -cd %s 2>&1", "bzip2 > %s", ".bz2" },
|
{ "bzip2 -cd %s 2>&1", "bzip2 > %s", ".bz2" },
|
||||||
{ "gzip -cd %s 2>&1", "gzip > %s", ".gz" },
|
{ "gzip -cd %s 2>&1", "gzip > %s", ".gz" },
|
||||||
|
@ -124,6 +124,11 @@ regex/\.t(ar\.lzma|lz)$
|
|||||||
Open=%cd %p#utar
|
Open=%cd %p#utar
|
||||||
View=%view{ascii} lzma -dc %f 2>/dev/null | tar tvvf -
|
View=%view{ascii} lzma -dc %f 2>/dev/null | tar tvvf -
|
||||||
|
|
||||||
|
# .tar.xz, .txz
|
||||||
|
regex/\.t(ar\.xz|xz)$
|
||||||
|
Open=%cd %p#utar
|
||||||
|
View=%view{ascii} xz -dc %f 2>/dev/null | tar tvvf -
|
||||||
|
|
||||||
# .tar.F - used in QNX
|
# .tar.F - used in QNX
|
||||||
regex/\.tar\.F$
|
regex/\.tar\.F$
|
||||||
# Open=%cd %p#utar
|
# Open=%cd %p#utar
|
||||||
@ -320,6 +325,10 @@ 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}
|
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
|
View=%view{ascii,nroff} case %d/%f in */log/*|*/logs/*) lzma -dc %f ;; *) lzma -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac
|
||||||
|
|
||||||
|
regex/([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.xz$
|
||||||
|
Open=case %d/%f in */log/*|*/logs/*) xz -dc %f ;; *) xz -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac | %var{PAGER:more}
|
||||||
|
View=%view{ascii,nroff} case %d/%f in */log/*|*/logs/*) xz -dc %f ;; *) xz -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac
|
||||||
|
|
||||||
|
|
||||||
### Images ###
|
### Images ###
|
||||||
|
|
||||||
@ -601,6 +610,11 @@ regex/\.lzma$
|
|||||||
Open=lzma -dc %f | %var{PAGER:more}
|
Open=lzma -dc %f | %var{PAGER:more}
|
||||||
View=%view{ascii} lzma -dc %f 2>/dev/null
|
View=%view{ascii} lzma -dc %f 2>/dev/null
|
||||||
|
|
||||||
|
# xz
|
||||||
|
regex/\.xz$
|
||||||
|
Open=xz -dc %f | %var{PAGER:more}
|
||||||
|
View=%view{ascii} xz -dc %f 2>/dev/null
|
||||||
|
|
||||||
|
|
||||||
### Default ###
|
### Default ###
|
||||||
|
|
||||||
|
11
src/util.c
11
src/util.c
@ -875,6 +875,16 @@ get_compression_type (int fd)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* XZ compression magic */
|
||||||
|
if (magic[0] == 0xFD
|
||||||
|
&& magic[1] == 0x37 && magic[2] == 0x7A && magic[3] == 0x58) {
|
||||||
|
if (mc_read (fd, (char *) magic + 4, 2) == 2) {
|
||||||
|
if (magic[4] == 0x5A && magic[5] == 0x00) {
|
||||||
|
return COMPRESSION_XZ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -886,6 +896,7 @@ decompress_extension (int type)
|
|||||||
case COMPRESSION_BZIP: return "#ubz";
|
case COMPRESSION_BZIP: return "#ubz";
|
||||||
case COMPRESSION_BZIP2: return "#ubz2";
|
case COMPRESSION_BZIP2: return "#ubz2";
|
||||||
case COMPRESSION_LZMA: return "#ulzma";
|
case COMPRESSION_LZMA: return "#ulzma";
|
||||||
|
case COMPRESSION_XZ: return "#uxz";
|
||||||
}
|
}
|
||||||
/* Should never reach this place */
|
/* Should never reach this place */
|
||||||
fprintf (stderr, "Fatal: decompress_extension called with an unknown argument\n");
|
fprintf (stderr, "Fatal: decompress_extension called with an unknown argument\n");
|
||||||
|
@ -183,7 +183,8 @@ enum compression_type {
|
|||||||
COMPRESSION_GZIP,
|
COMPRESSION_GZIP,
|
||||||
COMPRESSION_BZIP,
|
COMPRESSION_BZIP,
|
||||||
COMPRESSION_BZIP2,
|
COMPRESSION_BZIP2,
|
||||||
COMPRESSION_LZMA
|
COMPRESSION_LZMA,
|
||||||
|
COMPRESSION_XZ
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Looks for ``magic'' bytes at the start of the VFS file to guess the
|
/* Looks for ``magic'' bytes at the start of the VFS file to guess the
|
||||||
|
@ -30,6 +30,7 @@ mcisofs_list () {
|
|||||||
# left as a reminder to implement compressed image support =)
|
# left as a reminder to implement compressed image support =)
|
||||||
case "$1" in
|
case "$1" in
|
||||||
*.lzma) MYCAT="lzma -dc";;
|
*.lzma) MYCAT="lzma -dc";;
|
||||||
|
*.xz) MYCAT="xz -dc";;
|
||||||
*.bz2) MYCAT="bzip2 -dc";;
|
*.bz2) MYCAT="bzip2 -dc";;
|
||||||
*.gz) MYCAT="gzip -dc";;
|
*.gz) MYCAT="gzip -dc";;
|
||||||
*.z) MYCAT="gzip -dc";;
|
*.z) MYCAT="gzip -dc";;
|
||||||
|
@ -13,6 +13,7 @@ AWK=@AWK@
|
|||||||
mclslRfs_list () {
|
mclslRfs_list () {
|
||||||
case "$1" in
|
case "$1" in
|
||||||
*.lzma) MYCAT="lzma -dc";;
|
*.lzma) MYCAT="lzma -dc";;
|
||||||
|
*.xz) MYCAT="xz -dc";;
|
||||||
*.bz2) MYCAT="bzip2 -dc";;
|
*.bz2) MYCAT="bzip2 -dc";;
|
||||||
*.gz) MYCAT="gzip -dc";;
|
*.gz) MYCAT="gzip -dc";;
|
||||||
*.z) MYCAT="gzip -dc";;
|
*.z) MYCAT="gzip -dc";;
|
||||||
|
@ -8,6 +8,7 @@ use bytes;
|
|||||||
$zcat="zcat"; # gunzip to stdout
|
$zcat="zcat"; # gunzip to stdout
|
||||||
$bzcat="bzip2 -dc"; # bunzip2 to stdout
|
$bzcat="bzip2 -dc"; # bunzip2 to stdout
|
||||||
$lzcat="lzma -dc"; # unlzma to stdout
|
$lzcat="lzma -dc"; # unlzma to stdout
|
||||||
|
$xzcat="xz -dc"; # unxz to stdout
|
||||||
$file="file"; # "file" command
|
$file="file"; # "file" command
|
||||||
$TZ='GMT'; # default timezone (for Date module)
|
$TZ='GMT'; # default timezone (for Date module)
|
||||||
|
|
||||||
@ -185,6 +186,8 @@ if (/gzip/) {
|
|||||||
exit 1 unless (open IN, "$bzcat $mbox_qname|");
|
exit 1 unless (open IN, "$bzcat $mbox_qname|");
|
||||||
} elsif (/lzma/) {
|
} elsif (/lzma/) {
|
||||||
exit 1 unless (open IN, "$lzcat $mbox_qname|");
|
exit 1 unless (open IN, "$lzcat $mbox_qname|");
|
||||||
|
} elsif (/xz/) {
|
||||||
|
exit 1 unless (open IN, "$xzcat $mbox_qname|");
|
||||||
} else {
|
} else {
|
||||||
exit 1 unless (open IN, "<$mbox_name");
|
exit 1 unless (open IN, "<$mbox_name");
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ use File::Temp 'tempfile';
|
|||||||
|
|
||||||
# standard binaries
|
# standard binaries
|
||||||
my $lzma = 'lzma';
|
my $lzma = 'lzma';
|
||||||
|
my $xz = 'xz';
|
||||||
my $bzip = 'bzip2';
|
my $bzip = 'bzip2';
|
||||||
my $gzip = 'gzip';
|
my $gzip = 'gzip';
|
||||||
my $fileutil = 'file';
|
my $fileutil = 'file';
|
||||||
@ -73,6 +74,8 @@ sub myin
|
|||||||
$_=`$fileutil $qfname`;
|
$_=`$fileutil $qfname`;
|
||||||
if (/lzma/) {
|
if (/lzma/) {
|
||||||
return "$lzma -dc $qfname";
|
return "$lzma -dc $qfname";
|
||||||
|
} elsif (/xz/) {
|
||||||
|
return "$xz -dc $qfname";
|
||||||
} elsif (/bzip/) {
|
} elsif (/bzip/) {
|
||||||
return "$bzip -dc $qfname";
|
return "$bzip -dc $qfname";
|
||||||
} elsif (/gzip/) {
|
} elsif (/gzip/) {
|
||||||
@ -91,6 +94,8 @@ sub myout
|
|||||||
$_=`$fileutil $qfname`;
|
$_=`$fileutil $qfname`;
|
||||||
if (/lzma/) {
|
if (/lzma/) {
|
||||||
return "$lzma -c $sep $qfname";
|
return "$lzma -c $sep $qfname";
|
||||||
|
} elsif (/xz/) {
|
||||||
|
return "$xz -c $sep $qfname";
|
||||||
} elsif (/bzip/) {
|
} elsif (/bzip/) {
|
||||||
return "$bzip -c $sep $qfname";
|
return "$bzip -c $sep $qfname";
|
||||||
} elsif (/gzip/) {
|
} elsif (/gzip/) {
|
||||||
|
@ -12,6 +12,8 @@ bz2/1 bzip2 < %1 > %3
|
|||||||
ubz2/1 bzip2 -d < %1 > %3
|
ubz2/1 bzip2 -d < %1 > %3
|
||||||
lzma/1 lzma < %1 > %3
|
lzma/1 lzma < %1 > %3
|
||||||
ulzma/1 lzma -d < %1 > %3
|
ulzma/1 lzma -d < %1 > %3
|
||||||
|
xz/1 xz < %1 > %3
|
||||||
|
uxz/1 xz -d < %1 > %3
|
||||||
tar/1 tar cf %3 %1
|
tar/1 tar cf %3 %1
|
||||||
tgz/1 tar czf %3 %1
|
tgz/1 tar czf %3 %1
|
||||||
uhtml/1 lynx -force_html -dump %1 > %3
|
uhtml/1 lynx -force_html -dump %1 > %3
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user