#! /bin/sh # # Written by Jakub Jelinek 1995 # Updated by Christian Gennerat 1999 # # (C) 1995,1999 The Free Software Foundation. # # DZIP=/usr/bin XZIP="$DZIP/zip -g" XDZIP="$DZIP/zip -d" XUNZIP="$DZIP/unzip" XZIPINFO="$DZIP/unzip -Z" # #If you don't have zipinfo, set ZIPINFO= # mczipfs_list () { DOZIPINFO=no if test -n "$XZIPINFO"; then DOZIPINFO= $XZIPINFO -l "$1" | @AWK@ -v uid=${UID-0} -v zipfile="$1" -v xunzip=${XUNZIP-unzip} ' /^Archive/ { next } /^[0-9]*\ file/ { next } /unx/ { split($0,a,":") nam = substr(a[2],4) if ($1 ~ /^l/ ) { arrow=" -> " linkname="" cmd=xunzip " -p " zipfile " " nam cmd | getline linkname } else { arrow="" linkname="" } if (nam ~ /^\^/) nam=substr(nam, 2) split($8, a, "-") if (a[3] < 50) a[3] = 2000 + a[3] else a[3] = 1900 + a[3] 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 next } { exit 214 }' 2>/dev/null if test $? = 214; then DOZIPINFO=no fi fi if test -n "$DOZIPINFO"; then $XUNZIP -v "$1" | @AWK@ -v uid=${UID-0} ' BEGIN { hyphens=0 } /^Archive/ { next } /^\ Length/ { next } /^\ ?------/ { if (hyphens > 0) exit 0; hyphens=1; next } { if (hyphens < 1) next; if ($8 ~ /^\^/) $8=substr($8, 2) if ($8 ~ /\/$/) printf "drwxr-xr-x 1 %-8d %-8d %8d %s %s %s\n", uid, 0, $1, $5, $6, $8 else printf "-rw-r--r-- 1 %-8d %-8d %8d %s %s %s\n", uid, 0, $1, $5, $6, $8 }' 2>/dev/null fi } mczipfs_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" $XZIP "$1" "$2" &>/dev/null cd $pwd rm -rf $dir } mczipfs_copyin () { # 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 -p) to preserve date, but $2 is dated now! cp -p $3 "$3.dir/$2" $XZIP "$1" "$2" >/dev/null cd $pwd rm -rf $3.dir } mczipfs_copyout () { $XUNZIP -p "$1" "$2" > "$3" 2>/dev/null } mczipfs_rm () { $XDZIP "$1" "$2" &>/dev/null } mczipfs_rmdir () { $XDZIP "$1" "$2"/ &>/dev/null } umask 077 #echo "`date +%T` ${0##*/} $1 $2 to=$3 tmp=$4" >>/tmp/${0##*/}.log case "$1" in list) mczipfs_list "$2"; exit 0;; rm) mczipfs_rm "$2" "$3" ; exit 0;; rmdir) mczipfs_rmdir "$2" "$3" ; exit 0;; mkdir) mczipfs_mkdir "$2" "$3" ; exit 0;; copyin) mczipfs_copyin "$2" "$3" "$4" ; exit 0;; copyout) mczipfs_copyout "$2" "$3" "$4" ; exit 0;; esac exit 1