#!/bin/sh # # Written by Pavel Roskin # (C) 2005 The Free Software Foundation. # # UNALZ=unalz mcualz_list () { $UNALZ -l "$1" | mawk -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