Ticket #2029: Error in supporting rar-archives
[pantumic.git] / lib / vfs / mc-vfs / extfs / urar.in
blob365f8aedd30d3dc1cc3c924153852ee546d87b45
1 #! /bin/sh
3 # Written by andrey joukov
4 # (C) 1996 2:5020/337.13@fidonet.org
5 # Updated by christian.gennerat@alcatel.fr 1999
6 # Andrew V. Samoilov <sav@bcs.zp.ua> 2000
7 # beta version 2.0
9 # rar and unrar can be found on http://www.rarlabs.com/
11 RAR=rar
12 UNRAR=$RAR
14 # Prefer unrar (freeware). Try to find unrar in $PATH.
15 save_IFS="$IFS"; IFS=:
16 for dir in $PATH; do
17 IFS="$save_IFS"
18 test -z "$dir" && dir=.
19 if test -x "$dir/unrar" -a -f "$dir/unrar"; then
20 UNRAR="$dir/unrar"
21 break
23 done
25 if [ ! -x $UNRAR -a -x $RAR ]; then
26 UNRAR=$RAR
29 mcrarfs_list ()
31 $UNRAR v -c- "$1" | @AWK@ -v uid=`id -u` -v gid=`id -g` '
32 BEGIN { flag=0 }
33 /^-------/ { flag++; if (flag > 1) exit 0; next }
34 flag==1 {
35 str = substr($0, 2)
36 getline
37 split($4, a, "-")
38 if (index($6, "D") != 0)
39 $6="drwxr-xr-x"
40 else
41 if (index($6, ".") != 0)
42 $6="-rw-r--r--"
43 printf "%s 1 %s %s %d %02d/%02d/%02d %s %s\n", $6, uid, gid, $1, a[2], a[1], a[3], $5, str
47 mcrarfs_copyin ()
49 # copyin by christian.gennerat@alcatel.fr
50 # preserve pwd. It is clean, but is it necessary?
51 pwd=`pwd`
52 # Create a directory and copy in it the tmp file with the good name
53 mkdir "$3.dir"
54 cd "$3.dir"
55 di="${2%/*}"
56 # if file is to be written upper in the archive tree, make fake dir
57 if test x"$di" != x"${2##*/}" ; then
58 mkdir -p "$di"
60 cp -fp "$3" "$3.dir/$2"
61 $RAR a "$1" "$2" >/dev/null
62 cd "$pwd"
63 rm -rf "$3.dir"
66 mcrarfs_copyout ()
68 $UNRAR p -p- -c- -inul "$1" "$2" > "$3"
71 mcrarfs_mkdir ()
73 # preserve pwd. It is clean, but is it necessary?
74 pwd=`pwd`
75 # Create a directory and create in it a tmp directory with the good name
76 dir=`mktemp -d "${MC_TMPDIR:-/tmp}/mctmpdir-urar.XXXXXX"` || exit 1
77 cd "$dir"
78 mkdir -p "$2"
79 # rar cannot create an empty directory
80 touch "$2"/.rarfs
81 $RAR a -r "$1" "$2" >/dev/null
82 $RAR d "$1" "$2/.rarfs" >/dev/null
83 cd "$pwd"
84 rm -rf "$dir"
87 mcrarfs_rm ()
89 $RAR d "$1" "$2" >/dev/null
92 LC_ALL=C
93 export LC_ALL
95 umask 077
97 cmd="$1"
98 shift
100 case "$cmd" in
101 # Workaround for a bug in mc - directories must precede files to
102 # avoid duplicate entries, so we sort output by filenames
103 list) mcrarfs_list "$@" | sort -k 8 ;;
104 rm) mcrarfs_rm "$@" ;;
105 rmdir) mcrarfs_rm "$@" ;;
106 mkdir) mcrarfs_mkdir "$@" ;;
107 copyin) mcrarfs_copyin "$@" ;;
108 copyout) mcrarfs_copyout "$@" ;;
109 *) exit 1 ;;
110 esac
111 exit 0