diff --git a/vfs/ChangeLog b/vfs/ChangeLog index 270462230..9c4052a48 100644 --- a/vfs/ChangeLog +++ b/vfs/ChangeLog @@ -1,3 +1,9 @@ +2005-07-20 Pavel Roskin + + * extfs/ualz.in: New file - support for ALZip archives. + * extfs/Makefile.am: Add ualz. + * extfs/extfs.ini: Likewise. + 2005-07-06 Pavel Tsekov * tar.c (tar_read_header): Properly handle non \0 terminated tar diff --git a/vfs/extfs/.cvsignore b/vfs/extfs/.cvsignore index 6f95e8288..c43583824 100644 --- a/vfs/extfs/.cvsignore +++ b/vfs/extfs/.cvsignore @@ -13,6 +13,7 @@ lslR mailfs patchfs rpms +ualz uar uarj uha diff --git a/vfs/extfs/Makefile.am b/vfs/extfs/Makefile.am index ff00525bb..e7efbe4d3 100644 --- a/vfs/extfs/Makefile.am +++ b/vfs/extfs/Makefile.am @@ -21,6 +21,7 @@ EXTFS_IN = \ mailfs.in \ patchfs.in \ rpms.in \ + ualz.in \ uar.in \ uarj.in \ uha.in \ @@ -44,6 +45,7 @@ EXTFS_OUT = \ mailfs \ patchfs \ rpms \ + ualz \ uar \ uarj \ uha \ diff --git a/vfs/extfs/extfs.ini b/vfs/extfs/extfs.ini index 2fc326374..4dbdf612f 100644 --- a/vfs/extfs/extfs.ini +++ b/vfs/extfs/extfs.ini @@ -8,6 +8,7 @@ ulha urar uha u7z +ualz # For arj usage you need a special patch to unarj (see unarj.diff) uarj diff --git a/vfs/extfs/ualz.in b/vfs/extfs/ualz.in new file mode 100644 index 000000000..cc4bb7bf7 --- /dev/null +++ b/vfs/extfs/ualz.in @@ -0,0 +1,61 @@ +#!/bin/sh +# +# Written by Pavel Roskin +# (C) 2005 The Free Software Foundation. +# +# + +UNALZ=unalz + +mcualz_list () +{ + $UNALZ -l "$1" | @AWK@ -v uid=`id -nu` -v gid=`id -ng` ' +{ + if ($0 ~ /^[0-9][0-9][0-9][0-9]:[0-9][0-9]:[0-9][0-9] /) + { + split($1, date, ":") + 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 %02d-%02d-%02d %s %s\n", perm, uid, gid, size, date[2], date[3], date[1], 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