merged in lzma patch from mandriva
[midnight-commander.git] / vfs / extfs / iso9660.in
blob467efdb69424ef510adb0aca0030c961aee20b44
1 #! /bin/sh
3 # ISO9660 VFS for MC by Michael Shigorin <mike@altlinux.org>,
4 # modifications by Grigory Milev <week@altlinux.org>
5 # and Kachalov Anton <mouse@linux.ru.net> April 2003
6 # based on lslR by Tomas Novak <tnovak@ipex.cz> April 2000
7 # -- look there for additional parsing comments if needed
9 # tested to comply with isoinfo 2.0's output
11 test_iso () {
12 CHARSET=`locale charmap 2>/dev/null`
13 if test -z "$CHARSET"; then
14 CHARSET=`locale 2>/dev/null | grep LC_CTYPE | sed -n -e 's/.*\.\(.*\)"$/\1/p'`
16 if test -n "$CHARSET"; then
17 CHARSET=`echo "$CHARSET" | tr '[A-Z]' '[a-z]' | sed -e 's/^iso-/iso/'`
18 isoinfo -j $CHARSET -i /dev/null 2>&1 | grep "Unknown charset" >/dev/null && CHARSET=
20 if test -n "$CHARSET"; then
21 JOLIET_OPT="-j $CHARSET -J"
22 else
23 JOLIET_OPT="-J"
25 ISOINFO="isoinfo -R"
26 isoinfo -d -i "$1" | grep "NO Joliet" > /dev/null || ISOINFO="$ISOINFO $JOLIET_OPT"
29 mcisofs_list () {
30 # left as a reminder to implement compressed image support =)
31 case "$1" in
32 *.lzma) MYCAT="lzma -dc";;
33 *.bz2) MYCAT="bzip2 -dc";;
34 *.gz) MYCAT="gzip -dc";;
35 *.z) MYCAT="gzip -dc";;
36 *.Z) MYCAT="gzip -dc";;
37 *) MYCAT="cat";;
38 esac
40 $ISOINFO -l -i "$1" | @AWK@ '
41 BEGIN {
42 dir="";
43 # Pattern to match 8 first fields.
44 rx = "[^ ]+[ ]+";
45 rx = "^" rx rx rx rx rx rx rx rx;
46 irx = "^\\[ *[0-9]* *[0-9]+\\] ";
48 /^$/ { next }
49 /^d---------/ { next }
50 /^Directory listing of [^ ].*$/ {
51 dir=substr($0, 23);
52 next;
54 { $11 != "" } {
55 name=$0
56 sub(rx, "", name)
57 attr=substr($0, 1, length($0)-length(name))
58 # strip inodes and extra dir entries; fix perms
59 sub(irx, "", name)
60 sub("^---------- 0 0 0", "-r--r--r-- 1 root root", attr)
61 sub(" $", "", name)
62 ## sub(";[0-9]+$", "", name) ## would break copyout
63 # skip . and ..
64 if (name ~ /^\.\.?/) next;
65 printf "%s%s%s\n", attr, dir, name
66 }'
69 mcisofs_copyout () {
70 $ISOINFO -i "$1" -x "/$2" > "$3"
73 LC_ALL=C
75 cmd="$1"
76 shift
78 case "$cmd" in
79 list)
80 test_iso "$@";
81 mcisofs_list "$@";
82 exit 0;;
83 copyout)
84 test_iso "$@";
85 mcisofs_copyout "$@";
86 exit 0;;
87 esac
88 exit 1