1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #! /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 | @AWK@ "/Iconv not yet supported|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" | @AWK@ "/UCS level 1|NO Joliet/" > /dev/null || ISOINFO="$ISOINFO $JOLIET_OPT"
- }
- mcisofs_list () {
- # left as a reminder to implement compressed image support =)
- case "$1" in
- *.lzma) MYCAT="lzma -dc";;
- *.xz) MYCAT="xz -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
|