123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #! /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 2>/dev/null | 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
|