mc/vfs/extfs/iso9660.in

89 lines
2.1 KiB
Plaintext
Raw Normal View History

#! /bin/sh
# ISO9660 VFS for MC by Michael Shigorin <mike@altlinux.org>,
# modifications by Grigory Milev <week@altlinux.org>
# and Kachalov Anton <mouse@linux.ru.net> April 2003
# based on lslR by Tomas Novak <tnovak@ipex.cz> April 2000
# -- look there for additional parsing comments if needed
# tested to comply with isoinfo 2.0's output
test_iso () {
CHARSET=`locale charmap 2>/dev/null`
if test -z "$CHARSET"; then
CHARSET=`locale 2>/dev/null | grep LC_CTYPE | sed -n -e 's/.*\.\(.*\)"$/\1/p'`
fi
if test -n "$CHARSET"; then
CHARSET=`echo "$CHARSET" | tr '[A-Z]' '[a-z]' | sed -e 's/^iso-/iso/'`
isoinfo -j $CHARSET -i /dev/null 2>&1 | grep "Unknown charset" >/dev/null && CHARSET=
fi
if test -n "$CHARSET"; then
JOLIET_OPT="-j $CHARSET -J"
else
JOLIET_OPT="-J"
fi
ISOINFO="isoinfo -R"
isoinfo -d -i "$1" | grep "NO Joliet" > /dev/null || ISOINFO="$ISOINFO $JOLIET_OPT"
}
mcisofs_list () {
# left as a reminder to implement compressed image support =)
case "$1" in
2009-01-24 08:11:35 +03:00
*.lzma) MYCAT="lzma -dc";;
*.bz2) MYCAT="bzip2 -dc";;
*.gz) MYCAT="gzip -dc";;
*.z) MYCAT="gzip -dc";;
*.Z) MYCAT="gzip -dc";;
*) MYCAT="cat";;
esac
$ISOINFO -l -i "$1" | @AWK@ '
BEGIN {
dir="";
# Pattern to match 8 first fields.
rx = "[^ ]+[ ]+";
rx = "^" rx rx rx rx rx rx rx rx;
irx = "^\\[ *[0-9]* *[0-9]+\\] ";
}
/^$/ { next }
/^d---------/ { next }
/^Directory listing of [^ ].*$/ {
dir=substr($0, 23);
next;
}
{ $11 != "" } {
name=$0
sub(rx, "", name)
attr=substr($0, 1, length($0)-length(name))
# strip inodes and extra dir entries; fix perms
sub(irx, "", name)
sub("^---------- 0 0 0", "-r--r--r-- 1 root root", attr)
sub(" $", "", name)
## sub(";[0-9]+$", "", name) ## would break copyout
# skip . and ..
if (name ~ /^\.\.?/) next;
printf "%s%s%s\n", attr, dir, name
}'
}
mcisofs_copyout () {
$ISOINFO -i "$1" -x "/$2" > "$3"
}
LC_ALL=C
cmd="$1"
shift
case "$cmd" in
list)
test_iso "$@";
mcisofs_list "$@";
exit 0;;
copyout)
test_iso "$@";
mcisofs_copyout "$@";
exit 0;;
esac
exit 1