ftp://ftp.redhat.com/pub/redhat/linux/rawhide/SRPMS/SRPMS/gnome-vfs2-2.3.8-1.src.rpm
[gnome-vfs-httpcaptive.git] / modules / extfs / zip.in
1 #! /bin/sh
2 #
3 # Written by Jakub Jelinek 1995
4 # Updated by Christian Gennerat 1999
5 #
6 # (C) 1995,1999 The Free Software Foundation.
7 #
8 #
9
10 DZIP=/usr/bin
11 XZIP="$DZIP/zip -g"
12 XDZIP="$DZIP/zip -d"
13 XUNZIP="$DZIP/unzip"
14 XZIPINFO="$DZIP/unzip -Z"
15 #
16 #If you don't have zipinfo, set ZIPINFO=
17 #
18
19 mczipfs_list ()
20 {
21 DOZIPINFO=no
22 if test -n "$XZIPINFO"; then
23     DOZIPINFO=
24     $XZIPINFO -l "$1" | @AWK@ -v uid=${UID-0} -v zipfile="$1" -v xunzip=${XUNZIP-unzip} '
25 /^Archive/ { next }
26 /^[0-9]*\ file/ { next }
27 /unx/ { 
28 split($0,a,":")
29 nam = substr(a[2],4)
30 if ($1 ~ /^l/ ) {
31     arrow=" -> "
32     linkname=""
33     cmd=xunzip " -p " zipfile " " nam
34     cmd | getline linkname
35 } else {
36     arrow=""
37     linkname=""
38 }
39
40 if (nam ~ /^\^/)
41     nam=substr(nam, 2)
42 split($8, a, "-")
43 if (a[3] < 50)
44     a[3] = 2000 + a[3]
45 else
46     a[3] = 1900 + a[3]
47 printf "%s   1 %-8d %-8d %8d %3s %2d %4d %s %s%s%s\n", $1, uid, 0, $4, a[2], a[1], a[3], $9, nam, arrow, linkname
48 next
49 }
50 {
51 exit 214
52 }' 2>/dev/null
53     if test $? = 214; then
54         DOZIPINFO=no
55     fi
56 fi
57 if test -n "$DOZIPINFO"; then
58     $XUNZIP -v "$1" | @AWK@ -v uid=${UID-0} '
59 BEGIN { hyphens=0 }
60 /^Archive/ { next }
61 /^\ Length/ { next }
62 /^\ ?------/ { if (hyphens > 0) exit 0; hyphens=1; next }
63
64 if (hyphens < 1) next;
65 if ($8 ~ /^\^/)
66     $8=substr($8, 2)
67 if ($8 ~ /\/$/)
68     printf "drwxr-xr-x   1 %-8d %-8d %8d %s %s %s\n", uid, 0, $1, $5, $6, $8
69 else
70     printf "-rw-r--r--   1 %-8d %-8d %8d %s %s %s\n", uid, 0, $1, $5, $6, $8 
71 }' 2>/dev/null
72 fi
73 }
74
75 mczipfs_mkdir ()
76 {
77 # preserve pwd. It is clean, but is it necessary?
78     pwd=`pwd`
79 # Create a directory and create in it a tmp directory with the good name     
80     dir=tmpdir.${RANDOM}
81     mkdir $dir
82     cd $dir
83     mkdir -p "$2"  
84     $XZIP "$1" "$2" &>/dev/null
85     cd $pwd
86     rm -rf $dir
87 }
88
89 mczipfs_copyin ()
90 {
91 # preserve pwd. It is clean, but is it necessary?
92     pwd=`pwd`
93 # Create a directory and copy in it the tmp file with the good name     
94     mkdir $3.dir
95     cd $3.dir
96     di="${2%/*}"
97 # if file is to be written upper in the archive tree, make fake dir
98     if test "$di" != "${2##*/}" ; then
99         mkdir -p "$di" 
100     fi
101 # (cp -p) to preserve date, but $2 is dated now!
102     cp -p $3 "$3.dir/$2" 
103     $XZIP "$1" "$2" >/dev/null
104     cd $pwd
105     rm -rf $3.dir
106 }
107
108 mczipfs_copyout ()
109 {
110     $XUNZIP -p "$1" "$2" > "$3" 2>/dev/null
111 }
112
113 mczipfs_rm ()
114 {
115     $XDZIP "$1" "$2" &>/dev/null
116 }
117
118 mczipfs_rmdir ()
119 {
120     $XDZIP "$1" "$2"/ &>/dev/null
121 }
122
123 umask 077
124
125 #echo "`date +%T` ${0##*/} $1 $2 to=$3 tmp=$4" >>/tmp/${0##*/}.log
126 case "$1" in
127   list)    mczipfs_list    "$2"; exit 0;;
128   rm)      mczipfs_rm      "$2" "$3" ; exit 0;;
129   rmdir)   mczipfs_rmdir   "$2" "$3" ; exit 0;;
130   mkdir)   mczipfs_mkdir   "$2" "$3" ; exit 0;;
131   copyin)  mczipfs_copyin  "$2" "$3" "$4" ; exit 0;;
132   copyout) mczipfs_copyout "$2" "$3" "$4" ; exit 0;;
133 esac
134 exit 1