123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- #! /bin/sh
- #
- # Written by andrey joukov
- # (C) 1996 2:5020/337.13@fidonet.org
- # Updated by christian.gennerat@alcatel.fr 1999
- # Andrew V. Samoilov <sav@bcs.zp.ua> 2000
- # beta version 2.0
- #
- # rar and unrar can be found on http://www.rarlabs.com/
- RAR=rar
- UNRAR=$RAR
- # Prefer unrar (freeware). Try to find unrar in $PATH.
- save_IFS="$IFS"; IFS=:
- for dir in $PATH; do
- IFS="$save_IFS"
- test -z "$dir" && dir=.
- if test -x "$dir/unrar" -a -f "$dir/unrar"; then
- UNRAR="$dir/unrar"
- break
- fi
- done
- if [ ! -x $UNRAR -a -x $RAR ]; then
- UNRAR=$RAR
- fi
- mcrarfs_list ()
- {
- $UNRAR v -c- -cfg- "$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
- }'
- }
- mcrarfs_copyin ()
- {
- # copyin by christian.gennerat@alcatel.fr
- # preserve pwd. It is clean, but is it necessary?
- pwd=`pwd`
- # Create a directory and copy in it the tmp file with the good name
- mkdir "$3.dir"
- cd "$3.dir"
- di="${2%/*}"
- # if file is to be written upper in the archive tree, make fake dir
- if test x"$di" != x"${2##*/}" ; then
- mkdir -p "$di"
- fi
- cp -fp "$3" "$3.dir/$2"
- $RAR a "$1" "$2" >/dev/null
- cd "$pwd"
- rm -rf "$3.dir"
- }
- mcrarfs_copyout ()
- {
- $UNRAR p -p- -c- -cfg- -inul "$1" "$2" > "$3"
- }
- mcrarfs_mkdir ()
- {
- # preserve pwd. It is clean, but is it necessary?
- pwd=`pwd`
- # Create a directory and create in it a tmp directory with the good name
- dir=`mktemp -d "${MC_TMPDIR:-/tmp}/mctmpdir-urar.XXXXXX"` || exit 1
- cd "$dir"
- mkdir -p "$2"
- # rar cannot create an empty directory
- touch "$2"/.rarfs
- $RAR a -r "$1" "$2" >/dev/null
- $RAR d "$1" "$2/.rarfs" >/dev/null
- cd "$pwd"
- rm -rf "$dir"
- }
- mcrarfs_rm ()
- {
- $RAR d "$1" "$2" >/dev/null
- }
- 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) mcrarfs_list "$@" | sort -k 8 ;;
- rm) mcrarfs_rm "$@" ;;
- rmdir) mcrarfs_rm "$@" ;;
- mkdir) mcrarfs_mkdir "$@" ;;
- copyin) mcrarfs_copyin "$@" ;;
- copyout) mcrarfs_copyout "$@" ;;
- *) exit 1 ;;
- esac
- exit 0
|