From 33ded3d61be87e7026a6f86f54668e751e4b64fc Mon Sep 17 00:00:00 2001 From: Pavel Roskin Date: Wed, 22 Jun 2005 02:21:43 +0000 Subject: [PATCH] * extfs/u7z: New file - support for 7zip archives. * extfs/Makefile.am: Add u7z. * extfs/extfs.ini: Likewise. --- vfs/ChangeLog | 4 +++ vfs/extfs/Makefile.am | 2 +- vfs/extfs/extfs.ini | 1 + vfs/extfs/u7z | 67 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 vfs/extfs/u7z diff --git a/vfs/ChangeLog b/vfs/ChangeLog index 14dca98a8..ce93faf6c 100644 --- a/vfs/ChangeLog +++ b/vfs/ChangeLog @@ -1,5 +1,9 @@ 2005-06-21 Pavel Roskin + * extfs/u7z: New file - support for 7zip archives. + * extfs/Makefile.am: Add u7z. + * extfs/extfs.ini: Likewise. + * ftpfs.c (ftpfs_get_current_directory): Warning fix - "missing sentinel in function call". diff --git a/vfs/extfs/Makefile.am b/vfs/extfs/Makefile.am index 2b1a1c93b..ff00525bb 100644 --- a/vfs/extfs/Makefile.am +++ b/vfs/extfs/Makefile.am @@ -4,7 +4,7 @@ extfsdir = $(pkgdatadir)/extfs EXTFS_MISC = README extfs.ini sfs.ini # Scripts hat don't need adaptation to the local system -EXTFS_CONST = bpp rpm trpm +EXTFS_CONST = bpp rpm trpm u7z # Scripts that need adaptation to the local system - source files EXTFS_IN = \ diff --git a/vfs/extfs/extfs.ini b/vfs/extfs/extfs.ini index 7a04e8ed2..2fc326374 100644 --- a/vfs/extfs/extfs.ini +++ b/vfs/extfs/extfs.ini @@ -7,6 +7,7 @@ uzoo ulha urar uha +u7z # For arj usage you need a special patch to unarj (see unarj.diff) uarj diff --git a/vfs/extfs/u7z b/vfs/extfs/u7z new file mode 100644 index 000000000..da2272eea --- /dev/null +++ b/vfs/extfs/u7z @@ -0,0 +1,67 @@ +#! /bin/sh +# +# extfs support for p7zip +# Written by Pavel Roskin +# Licensed under GNU GPL version 2 or later version. + +P7ZIP=7za + +mcu7zip_list () +{ + # Symlinks are not shown - no idea how to distinguish them + # Read-only files are not shown as such - it's rarely useful + ugid="`id -nu` `id -ng`" + date_re='^\(....\)-\(..\)-\(..\) \(..:..:..\)' + date_mc='\2-\3-\1 \4' + size_re='............' + $P7ZIP l "$1" | sed -n "s/$date_re D.... $size_re $size_re\(.*\)/drwxr-xr-x 1 $ugid 0 $date_mc \5/p;s/$date_re \..... \($size_re\) $size_re\(.*\)/-rw-r--r-- 1 $ugid \5 $date_mc \6/p" +} + +mcu7zip_copyout () +{ + $P7ZIP e -so "$1" "$2" > "$3" 2>/dev/null +} + +mcu7zip_copyin () +{ + $P7ZIP a -si"$2" "$1" <"$3" >/dev/null 2>&1 +} + +mcu7zip_mkdir () +{ + dir=`mktemp -d "${MC_TMPDIR:-/tmp}/mctmpdir-u7z.XXXXXX"` || exit 1 + mkdir -p "$dir"/"$2" + $P7ZIP a -w"$dir" "$1" "$2" >/dev/null 2>&1 + rm -rf "$dir" +} + +mcu7zip_rm () +{ + # NOTE: Version 4.20 fails to delete files in subdirectories + $P7ZIP d "$1" "$2" >/dev/null 2>&1 +} + +mcu7zip_rmdir () +{ + $P7ZIP d "$1" "$2"/ >/dev/null 2>&1 +} + +# override any locale for dates +LC_ALL=C +export LC_ALL + +umask 077 + +cmd="$1" +shift + +case "$cmd" in + list) mcu7zip_list "$@" ;; + copyout) mcu7zip_copyout "$@" ;; + copyin) mcu7zip_copyin "$@" ;; + mkdir) mcu7zip_mkdir "$@" ;; + rm) mcu7zip_rm "$@" ;; + rmdir) mcu7zip_rmdir "$@" ;; + *) exit 1 ;; +esac +exit 0