Skip to content

Commit de83032

Browse files
moose-kazangithub-actions[bot]
authored andcommitted
Ticket #4835: add support for brotli compression
Signed-off-by: Vadim Kalinnikov <[email protected]> Signed-off-by: Yury V. Zaytsev <[email protected]>
1 parent 2ebb1dd commit de83032

File tree

6 files changed

+89
-0
lines changed

6 files changed

+89
-0
lines changed

configure.ac

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,7 @@ src/vfs/extfs/helpers/Makefile
595595
src/vfs/extfs/helpers/a+
596596
src/vfs/extfs/helpers/apt+
597597
src/vfs/extfs/helpers/audio
598+
src/vfs/extfs/helpers/brotli
598599
src/vfs/extfs/helpers/deb
599600
src/vfs/extfs/helpers/deba
600601
src/vfs/extfs/helpers/debd

misc/ext.d/archive.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ do_view_action() {
1414
filetype=$1
1515

1616
case "${filetype}" in
17+
br)
18+
brotli -dck "${MC_EXT_FILENAME}" 2>/dev/null
19+
;;
1720
gz)
1821
gzip -dc "${MC_EXT_FILENAME}" 2>/dev/null
1922
;;

misc/mc.ext.ini.in

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -917,6 +917,12 @@ ShellIgnoreCase=true
917917
Open=%cd %p/uwim://
918918
View=%view{ascii} @EXTHELPERSDIR@/archive.sh view wim
919919

920+
[brotli]
921+
Shell=.br
922+
ShellIgnoreCase=true
923+
Open=Open=%cd %p/brotli://
924+
View=%view{ascii} @EXTHELPERSDIR@/archive.sh view br
925+
920926

921927
######### Files by Type #########
922928

src/vfs/extfs/helpers/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Makefile.in
33
a+
44
apt+
55
audio
6+
brotli
67
deb
78
deba
89
debd

src/vfs/extfs/helpers/Makefile.am

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ EXTFS_IN = \
1111
a+.in \
1212
apt+.in \
1313
audio.in \
14+
brotli.in \
1415
deb.in \
1516
deba.in \
1617
debd.in \
@@ -45,6 +46,7 @@ EXTFS_OUT = \
4546
a+ \
4647
apt+ \
4748
audio \
49+
brotli \
4850
deb \
4951
deba \
5052
debd \

src/vfs/extfs/helpers/brotli.in

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
#! @PERL@
2+
# Midnight Commander - Brotli support
3+
#
4+
# Written by:
5+
# Vadim Kalinnikov <[email protected]>
6+
#
7+
# This file is part of the Midnight Commander.
8+
#
9+
# It requires brotli: https://github.com/google/brotli
10+
# On Debian/Ubuntu brotli can be installed via:
11+
# apt install brotli
12+
13+
use strict;
14+
use warnings;
15+
use diagnostics;
16+
17+
sub f_mode($) {
18+
my $mode = shift;
19+
20+
my @perms = ('---', '--x', '-w-', '-wx', 'r--', 'r-x', 'rw-', 'rwx');
21+
22+
my $ret = "-";
23+
$ret .= $perms[($mode >> 6) & 7];
24+
$ret .= $perms[($mode >> 3) & 7];
25+
$ret .= $perms[$mode & 7];
26+
27+
return $ret;
28+
}
29+
30+
sub f_time($) {
31+
my $t = shift;
32+
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($t);
33+
34+
my $ret = sprintf("%02d/%02d/%04d %02d:%02d:%02d", $mon, $mday, 1900+$year, $hour, $min, $sec);
35+
return $ret;
36+
}
37+
38+
sub br_ls($) {
39+
my $filename = shift;
40+
41+
exit 1 if ! -f $filename;
42+
43+
# file information
44+
my @fileinfo = stat($filename);
45+
46+
# strip extension
47+
$filename =~ s/\.br$//;
48+
$filename =~ s|^.*/||;
49+
50+
printf "%s 1 %s %s %s %s %s\n",
51+
f_mode($fileinfo[2]), # attr
52+
getpwuid($fileinfo[4]) || $fileinfo[4], # uid
53+
getgrgid($fileinfo[5]) || $fileinfo[5], # gid
54+
$fileinfo[7], # size
55+
f_time($fileinfo[9]), # time
56+
$filename;
57+
}
58+
59+
sub br_copyout($$) {
60+
my $srcfilename = shift;
61+
my $dstfilename = shift;
62+
63+
system("brotli", "-dkfo", $dstfilename, $srcfilename) == 0 or exit(1);
64+
}
65+
66+
if (@ARGV >= 2 && $ARGV[0] eq "list") {
67+
br_ls($ARGV[1]);
68+
}
69+
elsif (@ARGV >= 4 && $ARGV[0] eq "copyout") {
70+
br_copyout($ARGV[1], $ARGV[3]);
71+
}
72+
else {
73+
exit(1);
74+
}
75+
76+

0 commit comments

Comments
 (0)