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=rar
- UNRAR=unrar # Prefer unrar (freeware)
- #
- # NOTE: rar ver 2.0 by Eugene Roshal
- # ftp.elf.stuba.sk/pub/pc/pack
- #
- if ! unrar >/dev/null 2>&1; then
- UNRAR=$RAR
- fi
- mcrarfs_list ()
- {
- $UNRAR v -c- "$1" | @AWK@ -v uid=${UID-0} '
- BEGIN { flag=0; date="JanFebMarAprMayJunJulAugSepOctNovDec" }
- /^-------/ { flag++; if (flag > 1) exit 0; next }
- {
- if (flag == 0) next
- if ( !/ [0-9][0-9]:[0-9][0-9] /) str = $0 # there is no time spec in this line
- else {
- if (str ~ /^\^/)
- str=substr(str, 2)
- split($4, a, "-")
- if (a[3] < 50)
- a[3] = 2000 + a[3]
- else
- a[3] = 1900 + a[3]
- if (index($6, "D") != 0)
- $6="drwxr-xr-x"
- else
- if (index($6, ".") != 0)
- $6="-rw-r--r--"
- printf "%s 1 %-8d %-8d %8d %3s %2d %4d %s %s\n", $6, uid, 0, $1, substr(date, (a[2]-1)*3+1, 3), 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 "$di" != "${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 -c- -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=tmpdir.${RANDOM}
- mkdir $dir
- 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
- list) mcrarfs_list "$@" | sort +9 ;; # rar lists directories
- # after files, so sort names
- # to prevent duplication
- rm) mcrarfs_rm "$@" ;;
- rmdir) mcrarfs_rm "$@" ;;
- mkdir) mcrarfs_mkdir "$@" ;;
- copyin) mcrarfs_copyin "$@" ;;
- copyout) mcrarfs_copyout "$@" ;;
- *) exit 1 ;;
- esac
- exit 0
|