extfs cleanups
Adam Byrtek 'alpha'
alpha at student.uci.agh.edu.pl
Thu Dec 5 17:21:48 UTC 2002
Sorry, I've forgotten to attach the files.
--
_.|._ |_ _. : Adam Byrtek, alpha@(irc.pl|debian.org)
(_|||_)| |(_| : gg 1802819, pgp 0xB25952C0
| : jid alpha.jabberpl.org
-------------- next part --------------
#! /bin/sh
#
# Written by andrey joukov
# (C) 1996 2:5020/337.13 at fidonet.org
# Updated by christian.gennerat at alcatel.fr 1999
# Andrew V. Samoilov <sav at bcs.zp.ua> 2000
# beta version 2.0
# Updated by Adam Byrtek <alpha at debian.org>, Dec 2002
# (error handling, binaries detection, unnecessary output redirected
# to /dev/null, debug, some cleanups and fixes)
#DEBUG=YES
# throw error message to stderr
die ()
{
echo $1 >&2
exit 1
}
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
}
}' 2>/dev/null || die "List: archive error."
}
mcrarfs_copyin ()
{
if [ -z $RAR ]; then
die "Copyin: binary 'rar' not found, sorry."
fi
# copyin by christian.gennerat at 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 &> /dev/null || die "Copyin: permision denied."
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! [ -p breaks mode - alpha ]
cp $3 "$3.dir/$2"
$RAR a "$1" "$2" &>/dev/null || die "Copyin: archive error. Delete $3.dir"
cd $pwd
rm -rf $3.dir
}
mcrarfs_copyout ()
{
$UNRAR p -c- -inul "$1" "$2" > $3 2>/dev/null || die "Copyout: archive error."
}
mcrarfs_mkdir ()
{
if [ -z $RAR ]; then
die "Mkdir: binary 'rar' not found, sorry."
fi
# 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 &>/dev/null || die "Mkdir: permision denied."
cd $dir
mkdir -p "$2"
# rar cannot create an empty directory
touch "$2"/.rarfs
$RAR a -r "$1" "$2" &>/dev/null || die "Mkdir: archive error. Delete $dir."
$RAR d "$1" "$2"/.rarfs &>/dev/null || die "Mkdir: archive error. Delete $dir."
cd $pwd
rm -rf $dir
}
mcrarfs_rm ()
{
if [ -z $RAR ]; then
die "Rm: binary 'rar' not found, sorry."
fi
$RAR d "$1" "$2" &>/dev/null || die "Rm: archive error"
}
# debug
if [ $DEBUG == YES ]; then
echo $0 $1 $2 $3 $4 >> /tmp/mcdebug
fi
# chceck neccesary binaries
# prefer unrar (freeware)
UNRAR=`type -p unrar`
if [ -z $UNRAR ]; then
UNRAR=`type -p rar`
if [ -z $UNRAR ]; then
die "Binary 'rar/unrar' not found, sorry."
fi
fi
RAR=`type -p rar`
AWK=`type -p awk`
if [ -z $AWK ]; then
AWK=`type -p mawk`
if [ -z $AWK ]; then
AWK=`type -p gawk`
if [ -z $AWK ]; then
die "Binary 'awk/mawk/gawk' not found, sorry."
fi
fi
fi
umask 077
# uncomment this line for debugging
#echo "`date +%T` ${0##*/} $1 $2 to=$3 tmp=$4" >>/tmp/${0##*/}.log
case "$1" in
list) mcrarfs_list "$2"; exit 0;;
rm) mcrarfs_rm "$2" "$3" ; exit 0;;
rmdir) mcrarfs_rm "$2" "$3" ; exit 0;;
mkdir) mcrarfs_mkdir "$2" "$3" ; exit 0;;
copyin) mcrarfs_copyin "$2" "$3" $4; exit 0;;
copyout) mcrarfs_copyout "$2" "$3" $4; exit 0;;
esac
exit 1
-------------- next part --------------
#! /bin/sh
#
# Zoo file system
# Copyright ? U. N. Known
#
# This filesystem is _dangerous_. It used to create symlinks in filesystem
# with zoo file, it used to happily delete file from your filesystem.
# Now it is 'only' very ugly (it creates temporary files in ~/.mc/
# Updated by Adam Byrtek <alpha at debian.org>, Dec 2002
# (error handling, binaries detection, unnecessary output redirected
# to /dev/null, some cleanups and fixes)
#DEBUG=YES
# throw error message to stderr
die ()
{
echo $1 >&2
exit 1
}
mczoofs_list ()
{
$ZOO l $1 | $AWK -v uid=${UID-0} '
BEGIN { hyphens=0 }
/^---/ { if (hyphens > 0) exit 0; hyphens=1; next }
/^[^\ ]/ { next }
{
if (NF < 8)
next
if ($8 ~ /^\^/)
$8=substr($8, 2)
if ($6 > 50)
$6=$6 + 1900
else
$6=$6 + 2000
split($7, a, ":")
if ($8 ~ /\/$/)
printf "drwxr-xr-x 1 %-8d %-8d %8d %s %2d %4d %02d:%02d %s\n", uid, 0, $1, $5, $4, $6, a[1], a[2], $8
else
printf "-rw-r--r-- 1 %-8d %-8d %8d %s %2d %4d %02d:%02d %s\n", uid, 0, $1, $5, $4, $6, a[1], a[2], $8
}' 2>/dev/null || die "List: archive error."
exit 0
}
mczoofs_copyout ()
{
$ZOO xp $1 $2 | tail +6l > $3 2> /dev/null || die "Copyout: archive error."
exit 0
}
# debug
if [ $DEBUG == YES ]; then
echo $0 $1 $2 $3 $4 >> /tmp/mcdebug
fi
# chceck neccesary binaries
ZOO=`type -p zoo`
if [ -z $ZOO ]; then
die "Binary 'zoo' not found, sorry. $1"
fi
AWK=`type -p awk`
if [ -z $AWK ]; then
AWK=`type -p mawk`
if [ -z $AWK ]; then
AWK=`type -p gawk`
if [ -z $AWK ]; then
die "Binary 'awk/mawk/gawk' not found, sorry."
fi
fi
fi
# zoo is stupid and won't be happy when the name has no extension.
# we have to do a small trick :)
if echo $2 | grep '\.zoo$' &>/dev/null; then
ARCHIVE=$2
else
SYMLINK=/tmp/mc-uzoo-tmp.zoo
ln -fs $2 $SYMLINK &>/dev/null || die "Error. Is your /tmp writable?"
trap 'rm -f $SYMLINK &>/dev/null' 0 1 2 3 5 13 15
ARCHIVE=$SYMLINK
fi
umask 077
case "$1" in
list) mczoofs_list $ARCHIVE; exit $?;;
copyout) mczoofs_copyout $ARCHIVE $3 $4; exit $?;;
esac
exit 1
More information about the mc-devel
mailing list