diff options
Diffstat (limited to 'libre/mc-libre/unar.in')
-rw-r--r-- | libre/mc-libre/unar.in | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/libre/mc-libre/unar.in b/libre/mc-libre/unar.in new file mode 100644 index 000000000..3ba37b019 --- /dev/null +++ b/libre/mc-libre/unar.in @@ -0,0 +1,64 @@ +#! /bin/sh + +UNAR=`which unar 2>/dev/null` + +# Define $UNAR version +UNAR_VERSION=`$UNAR -v` + +mcunar4fs_list () +{ + $UNAR -q "$1" | @AWK@ -v uid=`id -u` -v gid=`id -g` ' +BEGIN { flag=0 } +/^-------/ { flag++; if (flag > 1) exit 0; next } +flag==1 { + str = substr($0, 2) + getline + split($4, a, "-") + if (index($6, "D") != 0) + $6="drwxr-xr-x" + else + if (index($6, ".") != 0) + $6="-rw-r--r--" + printf "%s 1 %s %s %d %02d/%02d/%02d %s ./%s\n", $6, uid, gid, $1, a[2], a[1], a[3], $5, str +}' +} + +mcunarfs_list () +{ + $UNAR -q "$1" | @AWK@ -v uid=`id -u` -v gid=`id -g` ' +BEGIN { flag=0 } +/^-----------/ { flag++; if (flag > 1) exit 0; next } +flag==1 { + split($5, a, "-") + if (index($1, "D") != 0) + $1="drwxr-xr-x" + else + if (index($1, ".") != 0) + $1="-rw-r--r--" + printf "%s 1 %s %s %d %02d/%02d/%02d %s ./%s\n", $1, uid, gid, $2, a[2], a[1], a[3], $6, $8 +}' +} + +mcunarfs_list () +{ + mcunarfs_list "$@" +} + +mcunarfs_copyout () +{ + $UNAR -q "$1" "$2" > "$3" +} + +umask 077 + +cmd="$1" +shift + +case "$cmd" in + # Workaround for a bug in mc - directories must precede files to + # avoid duplicate entries, so we sort output by filenames + list) mcunarfs_list "$@" | sort -k 8 ;; + copyout) mcunarfs_copyout "$@" ;; + *) exit 1 ;; +esac +exit 0 |