mc/vfs/extfs/patchfs

81 lines
1.4 KiB
Bash

#! /bin/sh
# Peter Daum <gator@cs.tu-berlin.de> (Jan 1998, mc-4.1.22)
# override any locale for dates. But LANG override LC_TIME (at least in glibc)
# unset LC_ALL
# LC_TIME=C
# export LC_TIME
LC_ALL=C
export LC_ALL
# paths to used programs:
ncat=cat # regular cat
zcat=zcat # gunzip to stdout
bzcat="bzip2 -dc" # bunzip2 to stdout
file=file # "file" command
sed=sed
filelist=FILELIST # names for "special" files
patchfs_list ()
{
date=`date +"%b %d %H:%M"`
perm="-r--r--r--"
uid=00000000
gid=00000000
size=00000000
nlink=" 1"
echo "$perm $nlink $uid $gid $size $date $filelist"
$cat $1 |
$sed -n "/^diff /{
s|^.* \([^ ]*\)$|$perm $nlink $uid $gid $size $date \1|gp
}"
}
patchfs_copyout ()
{
if [ "$2" = "$filelist" ]; then # list of all affected files
$cat $1 |
$sed -n "/^diff /{
s|^.* \([^ ]*\)$|\1|gp
}" > $3
exit 0
fi
fn=`echo $2|$sed 's|/|\\\/|g'` # escape '/' in filename
$cat $1 |
$sed -n "/^diff .*$fn/,/^diff /{
/^diff ./{
/$fn/p
d
}
p
}" > $3
}
patchfs_run ()
{
exit 0
}
type=`$file $2`
case $type in
*bzip*) cat=$bzcat ;;
*gzip*) cat=$zcat ;;
*text*) cat=$ncat ;;
*) exit 1
esac
umask 077
case "$1" in
list) patchfs_list $2; exit 0;;
copyout) patchfs_copyout $2 $3 $4; exit 0;;
run) patchfs_run; exit 0;;
esac
exit 1