Ticket #3523: mc-3523-support-lz4-compress-format.patch

File mc-3523-support-lz4-compress-format.patch, 11.7 KB (added by and, 8 years ago)
  • lib/util.c

    From 740a0f1807871740f8f3c4aeb9ca64626f26c416 Mon Sep 17 00:00:00 2001
    From: Andreas Mohr <and@gmx.li>
    Date: Sun, 27 Dec 2015 19:53:02 +0000
    Subject: [PATCH] support lz4 compress format (#3523)
    
    Signed-off-by: Andreas Mohr <and@gmx.li>
    ---
     lib/util.c                       |  6 ++++++
     lib/util.h                       |  1 +
     misc/ext.d/archive.sh            | 14 ++++++++++++++
     misc/ext.d/text.sh.in            |  7 +++++--
     misc/filehighlight.ini           |  2 +-
     misc/mc.ext.in                   | 18 ++++++++++++++++++
     misc/mc.menu.in                  |  5 ++++-
     misc/mc.menu.sr.in               |  5 ++++-
     src/editor/edit.c                |  1 +
     src/vfs/extfs/helpers/iso9660.in |  1 +
     src/vfs/extfs/helpers/lslR.in    |  1 +
     src/vfs/extfs/helpers/mailfs.in  |  3 +++
     src/vfs/extfs/helpers/patchfs.in |  9 +++++++--
     src/vfs/extfs/helpers/sfs.ini    |  2 ++
     14 files changed, 68 insertions(+), 7 deletions(-)
    
    diff --git a/lib/util.c b/lib/util.c
    index 5fcfd7c..342c3dc 100644
    a b get_compression_type (int fd, const char *name) 
    864864        } 
    865865    } 
    866866 
     867    /* LZ4 format - v1.5.0 - 0x184D2204 (little endian) */ 
     868    if (magic[0] == 0x04 && magic[1] == 0x22 && magic[2] == 0x4d && magic[3] == 0x18) 
     869        return COMPRESSION_LZ4; 
     870 
    867871    /* Support for LZMA (only utils format with magic in header). 
    868872     * This is the default format of LZMA utils 4.32.1 and later. */ 
    869873 
    decompress_extension (int type) 
    904908        return "/ubz" VFS_PATH_URL_DELIMITER; 
    905909    case COMPRESSION_BZIP2: 
    906910        return "/ubz2" VFS_PATH_URL_DELIMITER; 
     911    case COMPRESSION_LZ4: 
     912        return "/ulz4" VFS_PATH_URL_DELIMITER; 
    907913    case COMPRESSION_LZMA: 
    908914        return "/ulzma" VFS_PATH_URL_DELIMITER; 
    909915    case COMPRESSION_XZ: 
  • lib/util.h

    diff --git a/lib/util.h b/lib/util.h
    index 9c972ed..1832c9e 100644
    a b enum compression_type 
    5454    COMPRESSION_GZIP, 
    5555    COMPRESSION_BZIP, 
    5656    COMPRESSION_BZIP2, 
     57    COMPRESSION_LZ4, 
    5758    COMPRESSION_LZMA, 
    5859    COMPRESSION_XZ 
    5960}; 
  • misc/ext.d/archive.sh

    diff --git a/misc/ext.d/archive.sh b/misc/ext.d/archive.sh
    index e141bf8..27d5116 100755
    a b do_view_action() { 
    2323    bzip) 
    2424        bzip2 -dc "${MC_EXT_FILENAME}" 2>/dev/null 
    2525        ;; 
     26    lz4) 
     27        lz4 -dc "${MC_EXT_FILENAME}" 2>/dev/null 
     28        ;; 
    2629    lzma) 
    2730        lzma -dc "${MC_EXT_FILENAME}" 2>/dev/null 
    2831        ;; 
    do_view_action() { 
    4447        bzip2 -dc "${MC_EXT_FILENAME}" 2>/dev/null | \ 
    4548            tar tvvf - 
    4649        ;; 
     50    tar.lz4) 
     51        lz4 -dc "${MC_EXT_FILENAME}" 2>/dev/null | \ 
     52            tar tvvf - 
     53        ;; 
    4754    tar.lzma) 
    4855        lzma -dc "${MC_EXT_FILENAME}" 2>/dev/null | \ 
    4956            tar tvvf - 
    do_view_action() { 
    8188        gzip -dc "${MC_EXT_FILENAME}" | \ 
    8289            cpio -itv 2>/dev/null 
    8390        ;; 
     91    cpio.lz4) 
     92        lz4 -dc "${MC_EXT_FILENAME}" | \ 
     93            cpio -itv 2>/dev/null 
     94        ;; 
    8495    cpio.xz) 
    8596        xz -dc "${MC_EXT_FILENAME}" | \ 
    8697            cpio -itv 2>/dev/null 
    do_open_action() { 
    124135    gz) 
    125136        gz -dc "${MC_EXT_FILENAME}" | ${pager} 
    126137        ;; 
     138    lz4) 
     139        lz4 -dc "${MC_EXT_FILENAME}" | ${pager} 
     140        ;; 
    127141    lzma) 
    128142        lzma -dc "${MC_EXT_FILENAME}" | ${pager} 
    129143        ;; 
  • misc/ext.d/text.sh.in

    diff --git a/misc/ext.d/text.sh.in b/misc/ext.d/text.sh.in
    index d6e1933..b5476cf 100644
    a b get_unpacker() { 
    2222    man.bz2) 
    2323        unpacker="bzip2 -dc" 
    2424        ;; 
     25    man.lz4) 
     26        unpacker="lz4 -dc" 
     27        ;; 
    2528    man.lzma) 
    2629        unpacker="lzma -dc" 
    2730        ;; 
    do_view_action() { 
    5861    nroff.ms) 
    5962        nroff @MAN_FLAGS@ -ms "${MC_EXT_FILENAME}" 
    6063        ;; 
    61     man.gz|man.bz|man.bz2|man.lzma|man.xz) 
     64    man.gz|man.bz|man.bz2|man.lz4|man.lzma|man.xz) 
    6265        case "${MC_EXT_FILENAME}" in 
    6366        */log/*|*/logs/*) 
    6467            ${unpacker} "${MC_EXT_FILENAME}" 
    do_open_action() { 
    105108    nroff.ms) 
    106109        nroff @MAN_FLAGS@ -ms "${MC_EXT_FILENAME}" | ${pager} 
    107110        ;; 
    108     man.gz|man.bz|man.bz2|man.lzma|man.xz) 
     111    man.gz|man.bz|man.bz2|man.lz4|man.lzma|man.xz) 
    109112        case "${MC_EXT_FILENAME}" in 
    110113        */log/*|*/logs/*) 
    111114            ${unpacker} "${MC_EXT_FILENAME}" 
  • misc/filehighlight.ini

    diff --git a/misc/filehighlight.ini b/misc/filehighlight.ini
    index 8bc1722..cae8732 100644
    a b  
    2828    regexp=(^#.*|.*~$) 
    2929 
    3030[archive] 
    31     extensions=gz;bz2;tar;tgz;rpm;Z;rar;zip;arj;cab;lzh;lha;zoo;arc;ark;xz;tbz;tbz2;7z;ace 
     31    extensions=gz;bz2;tar;tgz;rpm;Z;rar;zip;arj;cab;lzh;lha;zoo;arc;ark;xz;tbz;tbz2;7z;ace;lz4 
    3232 
    3333[doc] 
    3434    extensions=txt;doc;rtf;diz;ctl;me;ps;pdf;xml;xsd;xslt;dtd;html;shtml;htm;mail;msg;lsm;po;nroff;man;tex;sgml;css;text;letter;chm;docx;docm;xlsx;xlsm;pptx;pptm 
  • misc/mc.ext.in

    diff --git a/misc/mc.ext.in b/misc/mc.ext.in
    index 70a5089..c78a298 100644
    a b regex/\.t(ar\.lzma|lz)$ 
    135135        Open=%cd %p/utar:// 
    136136        View=%view{ascii} @EXTHELPERSDIR@/archive.sh view tar.lzma 
    137137 
     138# .tar.lz4, .tlz4 
     139regex/\.t(ar\.lz4|lz4)$ 
     140        Open=%cd %p/utar:// 
     141        View=%view{ascii} @EXTHELPERSDIR@/archive.sh view tar.lz4 
     142 
    138143# .tar.xz, .txz 
    139144regex/\.t(ar\.xz|xz)$ 
    140145        Open=%cd %p/utar:// 
    shell/.cpio.Z 
    190195        Open=%cd %p/ucpio:// 
    191196        View=%view{ascii} @EXTHELPERSDIR@/archive.sh view cpio.z 
    192197 
     198shell/.cpio.lz4 
     199        Open=%cd %p/ucpio:// 
     200        View=%view{ascii} @EXTHELPERSDIR@/archive.sh view cpio.lz4 
     201 
    193202shell/.cpio.xz 
    194203        Open=%cd %p/ucpio:// 
    195204        View=%view{ascii} @EXTHELPERSDIR@/archive.sh view cpio.xz 
    regex/([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.bz2$ 
    360369        Open=@EXTHELPERSDIR@/text.sh open man.bz2 %var{PAGER:more} 
    361370        View=%view{ascii,nroff} @EXTHELPERSDIR@/text.sh view man.bz2 %var{PAGER:more} 
    362371 
     372regex/([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.lz4$ 
     373        Open=@EXTHELPERSDIR@/text.sh open man.lz4 %var{PAGER:more} 
     374        View=%view{ascii,nroff} @EXTHELPERSDIR@/text.sh view man.lz4 %var{PAGER:more} 
     375 
    363376regex/([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.lzma$ 
    364377        Open=@EXTHELPERSDIR@/text.sh open man.lzma %var{PAGER:more} 
    365378        View=%view{ascii,nroff} @EXTHELPERSDIR@/text.sh view man.lzma %var{PAGER:more} 
    type/^compress 
    730743        Open=@EXTHELPERSDIR@/archive.sh view gz %var{PAGER:more} 
    731744        View=%view{ascii} @EXTHELPERSDIR@/archive.sh view gz 
    732745 
     746# lz4 
     747regex/\.lz4$ 
     748        Open=@EXTHELPERSDIR@/archive.sh view lz4 %var{PAGER:more} 
     749        View=%view{ascii} @EXTHELPERSDIR@/archive.sh view lz4 
     750 
    733751# lzma 
    734752regex/\.lzma$ 
    735753        Open=@EXTHELPERSDIR@/archive.sh view lzma %var{PAGER:more} 
  • misc/mc.menu.in

    diff --git a/misc/mc.menu.in b/misc/mc.menu.in
    index 4d341a7..b6a6d29 100644
    a b U Uudecode marked news articles (needs work) 
    204204        fi 
    205205        echo "Please test the output file before deleting anything." 
    206206 
    207 =+ f \.tar\.gz$ | f \.tar\.z$ | f \.tgz$ | f \.tpz$ | f \.tar\.lz$ | f \.tar\.lzma$ | f \.tar\.7z$ | f \.tar\.xz$ | f \.tar\.Z$ | f \.tar\.bz2$ & t r 
     207=+ f \.tar\.gz$ | f \.tar\.z$ | f \.tgz$ | f \.tpz$ | f \.tar\.lz$ | f \.tar\.lz4$ | f \.tar\.lzma$ | f \.tar\.7z$ | f \.tar\.xz$ | f \.tar\.Z$ | f \.tar\.bz2$ & t r 
    208208x       Extract the contents of a compressed tar file 
    209209        unset PRG 
    210210        case %f in 
    x Extract the contents of a compressed tar file 
    220220            *.tar.lz) 
    221221                PRG="lzip -dc" 
    222222                ;; 
     223            *.tar.lz4) 
     224                PRG="lz4 -dc" 
     225                ;; 
    223226            *.tar.xz) 
    224227                PRG="xz -dc" 
    225228                ;; 
  • misc/mc.menu.sr.in

    diff --git a/misc/mc.menu.sr.in b/misc/mc.menu.sr.in
    index a0bb57a..5810aef 100644
    a b U Уудекодирај означени чланак вести (тре 
    184184        fi 
    185185        echo "Молим да проверите излазну датотеку пре било каквог брисања." 
    186186 
    187 =+ f \.tar\.gz$ | f \.tar\.z$ | f \.tgz$ | f \.tpz$ | f \.tar\.lz$ | f \.tar\.lzma$ | f \.tar\.7z$ | f \.tar\.xz$ | f \.tar\.Z$ | f \.tar\.bz2$ & t r 
     187=+ f \.tar\.gz$ | f \.tar\.z$ | f \.tgz$ | f \.tpz$ | f \.tar\.lz$ | f \.tar\.lz4$ | f \.tar\.lzma$ | f \.tar\.7z$ | f \.tar\.xz$ | f \.tar\.Z$ | f \.tar\.bz2$ & t r 
    188188x       Издвој садржај компримоване датотеке врсте `tar' 
    189189        unset PRG 
    190190        case %f in 
    x Издвој садржај компримоване датотеке в 
    200200            *.tar.lz) 
    201201                PRG="lzip -dc" 
    202202                ;; 
     203            *.tar.lz4) 
     204                PRG="lz4 -dc" 
     205                ;; 
    203206            *.tar.xz) 
    204207                PRG="xz -dc" 
    205208                ;; 
  • src/editor/edit.c

    diff --git a/src/editor/edit.c b/src/editor/edit.c
    index 808239b..733e12e 100644
    a b static const struct edit_filters 
    129129{ 
    130130    /* *INDENT-OFF* */ 
    131131    { "xz -cd %s 2>&1", "xz > %s", ".xz"}, 
     132    { "lz4 -cd %s 2>&1", "lz4 > %s", ".lz4" }, 
    132133    { "lzma -cd %s 2>&1", "lzma > %s", ".lzma" }, 
    133134    { "bzip2 -cd %s 2>&1", "bzip2 > %s", ".bz2" }, 
    134135    { "gzip -cd %s 2>&1", "gzip > %s", ".gz" }, 
  • src/vfs/extfs/helpers/iso9660.in

    diff --git a/src/vfs/extfs/helpers/iso9660.in b/src/vfs/extfs/helpers/iso9660.in
    index fd652b8..ffac9b2 100644
    a b test_iso () { 
    121121mcisofs_list () { 
    122122    # left as a reminder to implement compressed image support =) 
    123123    case "$1" in 
     124      *.lz4) MYCAT="lz4 -dc";; 
    124125      *.lzma) MYCAT="lzma -dc";; 
    125126      *.xz)  MYCAT="xz -dc";; 
    126127      *.bz2) MYCAT="bzip2 -dc";; 
  • src/vfs/extfs/helpers/lslR.in

    diff --git a/src/vfs/extfs/helpers/lslR.in b/src/vfs/extfs/helpers/lslR.in
    index 8b6833a..b4a3637 100644
    a b AWK=@AWK@ 
    1212 
    1313mclslRfs_list () { 
    1414case "$1" in 
     15  *.lz4) MYCAT="lz4 -dc";; 
    1516  *.lzma) MYCAT="lzma -dc";; 
    1617  *.xz)  MYCAT="xz -dc";; 
    1718  *.bz2) MYCAT="bzip2 -dc";; 
  • src/vfs/extfs/helpers/mailfs.in

    diff --git a/src/vfs/extfs/helpers/mailfs.in b/src/vfs/extfs/helpers/mailfs.in
    index bb372e3..7f566da 100644
    a b use bytes; 
    77 
    88$zcat="zcat";                 # gunzip to stdout 
    99$bzcat="bzip2 -dc";           # bunzip2 to stdout 
     10$lz4cat="lz4 -dc";            # unlz4 to stdout 
    1011$lzcat="lzma -dc";            # unlzma to stdout 
    1112$xzcat="xz -dc";              # unxz to stdout 
    1213$file="file";                 # "file" command 
    if (/gzip/) { 
    184185    exit 1 unless (open IN, "$zcat $mbox_qname|"); 
    185186} elsif (/bzip/) { 
    186187    exit 1 unless (open IN, "$bzcat $mbox_qname|"); 
     188} elsif (/lz4/) { 
     189    exit 1 unless (open IN, "$lz4cat $mbox_qname|"); 
    187190} elsif (/lzma/) { 
    188191    exit 1 unless (open IN, "$lzcat $mbox_qname|"); 
    189192} elsif (/xz/) { 
  • src/vfs/extfs/helpers/patchfs.in

    diff --git a/src/vfs/extfs/helpers/patchfs.in b/src/vfs/extfs/helpers/patchfs.in
    index c1c4f99..c1ff6b2 100644
    a b use POSIX; 
    1313use File::Temp 'tempfile'; 
    1414 
    1515# standard binaries 
     16my $lz4  = 'lz4'; 
    1617my $lzma = 'lzma'; 
    1718my $xz   = 'xz'; 
    1819my $bzip = 'bzip2'; 
    sub myin 
    7879    my ($qfname)=(quotemeta $_[0]); 
    7980 
    8081    $_=`$fileutil $qfname`; 
    81     if (/^'*lzma/) { 
     82    if (/^'*lz4/) { 
     83        return "$lz4 -dc $qfname"; 
     84    } elsif (/^'*lzma/) { 
    8285        return "$lzma -dc $qfname"; 
    8386    } elsif (/^'*xz/) { 
    8487        return "$xz -dc $qfname"; 
    sub myout 
    98101    my ($sep) = $append ? '>>' : '>'; 
    99102 
    100103    $_=`$fileutil $qfname`; 
    101     if (/^'*lzma/) { 
     104    if (/^'*lz4/) { 
     105        return "$lz4 -c $sep $qfname"; 
     106    } elsif (/^'*lzma/) { 
    102107        return "$lzma -c $sep $qfname"; 
    103108    } elsif (/^'*xz/) { 
    104109        return "$xz -c $sep $qfname"; 
  • src/vfs/extfs/helpers/sfs.ini

    diff --git a/src/vfs/extfs/helpers/sfs.ini b/src/vfs/extfs/helpers/sfs.ini
    index 522cca1..b1f51c8 100644
    a b bz/1 bzip < %1 > %3 
    1010ubz/1   bzip -d < %1 > %3 
    1111bz2/1   bzip2 < %1 > %3 
    1212ubz2/1  bzip2 -d < %1 > %3 
     13lz4/1   lz4 < %1 > %3 
     14ulz4/1  lz4 -d < %1 > %3 
    1315lzma/1  lzma < %1 > %3 
    1416ulzma/1 lzma -d < %1 > %3 
    1517xz/1    xz < %1 > %3