Skip to content

Commit

Permalink
Ticket #4130: add PAK archive support for extfs.
Browse files Browse the repository at this point in the history
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
  • Loading branch information
ilia-maslakov authored and aborodin committed Nov 8, 2020
1 parent 7f49605 commit 954e831
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 0 deletions.
1 change: 1 addition & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -625,6 +625,7 @@ src/vfs/extfs/helpers/ucab
src/vfs/extfs/helpers/uha
src/vfs/extfs/helpers/ulha
src/vfs/extfs/helpers/ulib
src/vfs/extfs/helpers/unar
src/vfs/extfs/helpers/urar
src/vfs/extfs/helpers/uwim
src/vfs/extfs/helpers/uzip
Expand Down
5 changes: 5 additions & 0 deletions misc/mc.ext.in
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,11 @@ type/^LHa\ .*archive
Open=%cd %p/ulha://
View=%view{ascii} @EXTHELPERSDIR@/archive.sh view lha

# PAK
type/^PAK\ .*archive
Open=%cd %p/unar://
View=%view{ascii} @EXTHELPERSDIR@/archive.sh view pak

# arj
regex/i/\.a(rj|[0-9][0-9])$
Open=%cd %p/uarj://
Expand Down
1 change: 1 addition & 0 deletions src/vfs/extfs/helpers/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ uarj
ucab
uha
ulha
unar
urar
uwim
uzip
Expand Down
2 changes: 2 additions & 0 deletions src/vfs/extfs/helpers/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ EXTFS_IN = \
uha.in \
ulha.in \
ulib.in \
unar.in \
urar.in \
uwim.in \
uzip.in \
Expand Down Expand Up @@ -61,6 +62,7 @@ EXTFS_OUT = \
uha \
ulha \
ulib \
unar \
urar \
uwim \
uzip \
Expand Down
3 changes: 3 additions & 0 deletions src/vfs/extfs/helpers/README.extfs
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,6 @@ patchsetfs - list of patches of current file

# Gputils lib archives.
ulib

# PAK Archive
unar
59 changes: 59 additions & 0 deletions src/vfs/extfs/helpers/unar.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#! /bin/sh

# Written by Ilia Maslakov <il.smind@gmail.com>
#
# (C) 2020 The Free Software Foundation.

# Define awk
AWK=@AWK@

# Define which archiver you are using with appropriate options
UNAR_LIST="lsar "
UNAR_GET="unar "

# The 'list' command executive
mc_unar_fs_list()
{
# List the contents of the archive and sort it out
$UNAR_LIST -l "$1" | $AWK -v uid=`id -nu` -v gid=`id -ng` '
BEGIN { flag = 0 }
/^\(Flags/ {next}
/^\(Mode/ {next}
{
flag++;
if (flag < 4)
next
pr="-r--r--r--"
if (index($2, "D") != 0)
pr="dr-xr-xr-x"
split($6, a, "-")
split($7, b, ":")
printf "%s 1 %s %s %d %02d/%02d/%02d %02d:%02d %s\n", pr, uid, gid, $3, a[3], a[2], a[1], b[1], b[2], $8
}'
}

# The 'copyout' command executive to copy displayed files to a destination
mc_unar_fs_copyout ()
{
TMPDIR=`mktemp -d "${MC_TMPDIR:-/tmp}/mctmpdir-uha.XXXXXX"` || exit 1

$UNAR_GET "$1" "$2" -o "$TMPDIR" >/dev/null
we=`basename "$1" | sed -E 's|^(.*?)\.\w+$|\1|'`
cat "$TMPDIR/$we/$2" > "$3"
cd /
rm -rf "$TMPDIR"
}

# The main routine
umask 077

cmd="$1"
shift

case "$cmd" in
list) mc_unar_fs_list "$@" ;;
copyout) mc_unar_fs_copyout "$@" ;;
*) exit 1 ;;
esac

exit 0

0 comments on commit 954e831

Please sign in to comment.