mirror of https://github.com/MidnightCommander/mc
85 lines
1.9 KiB
Bash
85 lines
1.9 KiB
Bash
#! /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=`echo "$save_ctype" | sed -n -e 's/.*\.\(.*\)"$/\1/p' | tr '[A-Z]' '[a-z]'`
|
|
if test -n "$CHARSET"; then
|
|
isoinfo -j $CHARSET 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
|
|
*.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"
|
|
}
|
|
|
|
save_ctype=`locale | grep LC_CTYPE`
|
|
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
|