summaryrefslogtreecommitdiffstats
path: root/src/vfs/extfs/helpers/unar.in
diff options
context:
space:
mode:
Diffstat (limited to 'src/vfs/extfs/helpers/unar.in')
-rw-r--r--src/vfs/extfs/helpers/unar.in59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/vfs/extfs/helpers/unar.in b/src/vfs/extfs/helpers/unar.in
new file mode 100644
index 0000000..e810307
--- /dev/null
+++ b/src/vfs/extfs/helpers/unar.in
@@ -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