mc/vfs/extfs/ucpio.in

76 lines
1.2 KiB
Bash

#!/bin/sh
#
# Written by Stas Maximov 1998 SVR4 (UnixWare)
# stmax@u213.srcc.msu.su
# (C) 1996 The Free Software Foundation.
#
#
uni_cat ()
# $1 is the archive name
{
case "$1" in
*.cpio.Z) compress -dc "$1"
;;
*.cpio.gz) gzip -dc "$1"
;;
*.cpio) cat "$1"
;;
*) echo "unknown extension"
esac
}
mccpiofs_list ()
# $1 is the archive name
{
uni_cat "$1" | cpio -itv | @AWK@ '
{
if (substr($9,length($9),1) == ",")
{
tmp = substr($9, 1, length($9)-1);
$9 = $8;
$8 = tmp
}
else if (substr($10,length($10),1) == ",")
{
tmp = substr($10, 1, length($10)-1);
$10 = $9
$9 = tmp
}
print $0
}'
}
mccpiofs_copyout ()
# $1 is the archive name
# $2 is a name of a file within the archive
# $3 is a name of a file within the system (to add from or extract to)
{
TMPDIR=/tmp/mctmpdir.$$
# FIXME: Try harder to generate a unique directory if this fails
mkdir -m 0700 $TMPDIR || exit 1
cd $TMPDIR
uni_cat "$1" | cpio -icumd "$2" 2>/dev/null
mv "$2" "$3"
cd /
rm -rf $TMPDIR
}
#
# main
#
umask 077
case "$1" in
list) mccpiofs_list $2
exit 0
;;
copyout) mccpiofs_copyout $2 $3 $4
exit 0
;;
esac
exit 1