File: u7z.in

package info (click to toggle)
avfs 1.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,864 kB
  • sloc: ansic: 31,321; sh: 6,482; perl: 1,916; makefile: 351
file content (128 lines) | stat: -rw-r--r-- 3,316 bytes parent folder | download | duplicates (5)
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#! /bin/sh
#
# u7z - 7zip file archive Virtual File System for Midnight Commander ( ftp://ftp.ibiblio.org/pub/Linux/utils/file/managers/mc/ )
# 
# Copyright (C) 2004 Sergiy Niskorodov (sgh at ukrpost dot net)

# Written by Sergiy Niskorodov aka SGh
#
# beta version 4.16 (11 Apr 2005)
#
# 7z for linux can be found on http://sourceforge.net/projects/p7zip/


# Thanks to urar VFS authors andrey joukov 2:5020/337.13@fidonet.org, 
# christian.gennerat@alcatel.fr, Andrew V. Samoilov <sav@bcs.zp.ua>
# I use this script like example


# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA


SEVENZ=`which 7za`


mc7zfs_list ()
{
    $SEVENZ l "$1" 2> /dev/null | @AWK@ -v uid=$(id -ru) '
BEGIN { flag=0; arr_of_month="JanFebMarAprMayJunJulAugSepOctNovDec" }
 /^-------/ { flag++; if (flag > 1) exit 0; next }
{
if (flag == 0) next

year=substr($1, 1, 4)
month=substr($1, 6, 2)
day=substr($1, 9, 2)

month_name=substr(arr_of_month, (month-1)*3+1, 3)

time=substr($2, 1, 5)

if (index($3, "D") != 0)
    attr="drwxr-xr-x"
else
if (index($3, ".") != 0)
    attr="-rw-r--r--"

size=$4

$0=substr($0, 54)
if (NF > 1)
    name=$0
else
    name=$1

gsub(/\\/, "/", name)

printf "%s   1 %-8d %-8d %8d %3s %2d %4d %s %s\n", attr, uid, 0, size, month_name, day, year, time, name
}'
}

mc7zfs_copyin ()
{
# preserve pwd.
    pwd=`pwd`
# Create a directory and copy in it the tmp file with the random name
    dir="$3".dir
    mkdir "$dir" || exit 1
    cd "$dir"
    mv "$1" .
    arname=`basename "$1"`
    di="${2%/*}"
# if file is to be written upper in the archive tree, make fake dir
    if test "$di" != "${2##*/}" ; then
#	echo asdsad 1>&2
        mkdir -p "$di" || exit 1
    fi
#    pwd > /tmp/cdir
#    echo "$arname $2" > /tmp/ters
    cp -fp "$3" "$dir/$2"
#    cp -f "$1" "$3.dir"
    $SEVENZ a "$arname" "$2" -w >/dev/null 2> /dev/null
    mv "$arname" "$1"
    cd $pwd
    rm -rf "$3.dir"
}

mc7zfs_copyout ()
{
    TMPDIR=`mktemp -u "${MC_TMPDIR:-/tmp}/mctmpdir-u7z.XXXXXX"` || exit 1
    trap 'rm -rf "$TMPDIR"; exit 0' 1 2 3 4 15
    mkdir -m 0700 "$TMPDIR" || exit 1

#    echo "$1 $2 $3" > hers
#	p7zip 0.91 don't understand filename in subdir without "./"
#	but in top dir it understand only without "./"
    FLIST=`$SEVENZ l "$1" 2> /dev/null`
    echo "$FLIST" | grep -q "[.][/]" > /dev/null 2>&1 && EXFNAME=*./"$2" || EXFNAME="$2"
    EXFN=`basename "$2"`
    $SEVENZ e -r- "$1" "$EXFNAME" -o"$TMPDIR" > /dev/null 2> /dev/null

    cat "$TMPDIR"/"$EXFN" > "$3"
    rm -rf "$TMPDIR"
}

umask 077

cmd="$1"
shift

case "$cmd" in
  list)    mc7zfs_list    "$@" ;;
  copyin)  mc7zfs_copyin  "$@" ;;
  copyout) mc7zfs_copyout "$@" ;;
  *) exit 1 ;;
esac
exit 0