summaryrefslogtreecommitdiffstats
path: root/src/vfs/extfs/helpers/ualz.in
blob: d054553ff006fe60e069a6021abfa1b04c483b0d (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
#!/bin/sh
#
# Written by Pavel Roskin <proski@gnu.org>
# (C) 2005 The Free Software Foundation.
#
#

UNALZ=unalz

mcualz_list ()
{
	$UNALZ -l "$1" | @AWK@ -v uid=`id -nu` -v gid=`id -ng` '
{
    if ($1 ~ /[0-9][0-9][:/][0-9][0-9][:/][0-9][0-9]$/)
    {
	# Kludge for non-POSIX date format in unalz 0.50
	split($1, date, "[/:]")
	if (length(date[1]) == 4) {
	    pdate = date[2] "/" date[3] "/" date[1]
	} else {
	    pdate = date[1] "/" date[2] "/" date[3]
	}

	time=$2
	perm=$3
	size=$4
	sub(/^ *[^ ]* *[^ ]* *[^ ]* *[^ ]* *[^ ]* */, "")
	file=$0
	gsub(/\\/, "/", file)
	if (perm ~ /.D../)
		perm = "drwxr-xr-x"
	else
		perm = "-rw-r--r--"
	printf "%s 1 %s %s %d %s %s %s\n", perm, uid, gid, size, pdate, time, file
    }
}
'
}

mcualz_copyout ()
{
    TMPDIR=`mktemp -d ${MC_TMPDIR:-/tmp}/mctmpdir-ualz.XXXXXX` || exit 1

    # This is a workaround for a bug in unalz 0.50 - it crashes if the
    # output directory is an absolute path.
    dir=`dirname "$TMPDIR/$2"`
    mkdir -p "$dir"

    $UNALZ -d "$TMPDIR" "$1" "$2" >/dev/null
    cat "$TMPDIR/$2" > "$3"
    rm -rf "$TMPDIR"
}

# override any locale for dates
LC_ALL=C
export LC_ALL
umask 077

cmd="$1"
shift

case "$cmd" in
  list)    mcualz_list    "$@" ;;
  copyout) mcualz_copyout "$@" ;;
  *) exit 1 ;;
esac

exit 0