summaryrefslogtreecommitdiffstats
path: root/src/vfs/extfs/helpers/uzoo.in
blob: fb079a5ad19f1ae8aa7135da1ead95c30b78b4b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#! /bin/sh
#
# Zoo file system
#
# Source of zoo can be found at
# ftp://ftp.ibiblio.org/pub/Linux/utils/compress/

ZOO=${MC_TEST_EXTFS_LIST_CMD:-zoo}

# Stupid zoo won't work if the archive name has no .zoo extension, so we
# have to make a symlink with a "better" name.  Also, zoo can create
# directories even if printing files to stdout, so it's safer to confine
# it to a temporary directory.
mklink ()
{
    TMPDIR=`mktemp -d ${MC_TMPDIR:-/tmp}/mctmpdir-uzoo.XXXXXX` || exit 1
    trap 'cd /; rm -rf "$TMPDIR"' 0 1 2 3 5 13 15
    ARCHIVE="$TMPDIR/tmp.zoo"
    ln -sf "$1" "$ARCHIVE"
    cd "$TMPDIR" || exit 1
}

mczoofs_list ()
{
    mklink "$1"
    $ZOO lq "$ARCHIVE" | @AWK@ -v uid=$(id -ru)  '
/^[^\ ]/ { next }
{
if (NF < 8)
    next
if ($8 ~ /^\^/)
    $8=substr($8, 2)
if ($6 > 50)
    $6=$6 + 1900
else
    $6=$6 + 2000
split($7, a, ":")
split("Jan:Feb:Mar:Apr:May:Jun:Jul:Aug:Sep:Oct:Nov:Dec", month_list, ":")
for (i=1; i<=12; i++) {
    month[month_list[i]] = i
}
if ($8 ~ /\/$/)
    printf "drwxr-xr-x   1 %-8d %-8d %8d %02d-%02d-%4d %02d:%02d %s\n", uid, 0, $1, month[$5], $4, $6, a[1], a[2], $8
else
    printf "-rw-r--r--   1 %-8d %-8d %8d %02d-%02d-%4d %02d:%02d %s\n", uid, 0, $1, month[$5], $4, $6, a[1], a[2], $8
}' 2>/dev/null
    exit 0
}

mczoofs_copyout ()
{
    mklink "$1"
    # zoo only accepts name without directory as file to extract
    base=`echo "$2" | sed 's,.*/,,'`
    $ZOO xpq: "$ARCHIVE" "$base" > "$3"
    cd /
    exit 0
}

umask 077

cmd="$1"
shift
case "$cmd" in
  list) mczoofs_list "$@" ;;
  copyout) mczoofs_copyout "$@" ;;
  *) exit 1 ;;
esac
exit 0