ftp://ftp.redhat.com/pub/redhat/linux/rawhide/SRPMS/SRPMS/gnome-vfs2-2.3.8-1.src.rpm
[gnome-vfs-httpcaptive.git] / modules / extfs / rar.in
1 #! /bin/sh
2 #
3 # Written by andrey joukov
4 # (C) 1996 2:5020/337.13@fidonet.org
5 # Updated by christian.gennerat@alcatel.fr 1999
6 # beta version 2.0
7 #
8 DRAR=/usr/bin
9 RAR=$DRAR/rar
10 UNRAR=$DRAR/unrar # Prefer unrar (freeware)
11 #
12 # NOTE: rar ver 2.0 by Eugene Roshal
13 # ftp.elf.stuba.sk/pub/pc/pack
14 #
15
16 mcrarfs_list ()
17 {
18      $UNRAR v -c- "$1" | @AWK@ -v uid=${UID-0} '
19 BEGIN { flag=0; date="JanFebMarAprMayJunJulAugSepOctNovDec" }
20 /^-------/ { flag++; if (flag > 1) exit 0; next }
21 {
22 if (flag == 0) next
23 if ( !/ [0-9][0-9]:[0-9][0-9] /) str = $0  # there is no time spec in this line
24 else {
25     if (str ~ /^\^/)
26         str=substr(str, 2)
27     split($4, a, "-")
28     if (a[3] < 50)
29         a[3] = 2000 + a[3]
30     else
31         a[3] = 1900 + a[3]
32     if (index($6, "D") != 0)
33         $6="drwxr-xr-x"
34     else
35         if (index($6, ".") != 0)
36             $6="-rw-r--r--"
37     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
38 }
39 }' 2>/dev/null
40 }
41
42 mcrarfs_copyin ()
43 {
44 # copyin by christian.gennerat@alcatel.fr
45 # preserve pwd. It is clean, but is it necessary?
46     pwd=`pwd`
47 # Create a directory and copy in it the tmp file with the good name     
48     mkdir $3.dir
49     cd $3.dir
50     di="${2%/*}"
51 # if file is to be written upper in the archive tree, make fake dir
52     if test "$di" != "${2##*/}" ; then
53         mkdir -p "$di" 
54     fi
55 # (cp -p) to preserve date, but $2 is dated now!
56     cp -p $3 "$3.dir/$2" 
57     $RAR a "$1" "$2" >/dev/null
58     cd $pwd
59     rm -rf $3.dir
60 }
61
62 mcrarfs_copyout ()
63 {
64     $UNRAR p -c- -inul "$1" "$2" > $3 2>/dev/null
65 }
66
67 mcrarfs_mkdir ()
68 {
69 # preserve pwd. It is clean, but is it necessary?
70     pwd=`pwd`
71 # Create a directory and create in it a tmp directory with the good name     
72     dir=tmpdir.${RANDOM}
73     mkdir $dir
74     cd $dir
75     mkdir -p "$2"  
76 # rar cannot create an empty directory    
77     touch "$2"/.rarfs
78     $RAR a -r "$1" "$2" &>/dev/null
79     $RAR d "$1" "$2"/.rarfs &>/dev/null
80     cd $pwd
81     rm -rf $dir
82 }
83
84 mcrarfs_rm ()
85 {
86     $RAR d "$1" "$2" &>/dev/null
87 }
88
89 umask 077
90
91 # uncomment this line for debugging
92 #echo "`date +%T` ${0##*/} $1 $2 to=$3 tmp=$4" >>/tmp/${0##*/}.log
93 case "$1" in
94   list)    mcrarfs_list    "$2"; exit 0;;
95   rm)      mcrarfs_rm      "$2" "$3" ; exit 0;;
96   rmdir)   mcrarfs_rm      "$2" "$3" ; exit 0;;
97   mkdir)   mcrarfs_mkdir   "$2" "$3" ; exit 0;;
98   copyin)  mcrarfs_copyin  "$2" "$3" $4; exit 0;;
99   copyout) mcrarfs_copyout "$2" "$3" $4; exit 0;;
100 esac
101 exit 1