-W is included in CFLAGS already.
[dragonfly.git] / release / scripts / tar.sh
1 #!/bin/sh -p
2 #
3 # Simple replacement for tar(1), using cpio(1).
4 #
5 # Copyright (c) 1996 Joerg Wunsch
6 # All rights reserved.
7 #
8 # Redistribution and use in source and binary forms, with or without
9 # modification, are permitted provided that the following conditions
10 # are met:
11 # 1. Redistributions of source code must retain the above copyright
12 #    notice, this list of conditions and the following disclaimer.
13 # 2. Redistributions in binary form must reproduce the above copyright
14 #    notice, this list of conditions and the following disclaimer in the
15 #    documentation and/or other materials provided with the distribution.
16 #
17 # THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
18 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 # IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
21 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 #
28 # $FreeBSD: src/release/scripts/tar.sh,v 1.5.2.2 2002/08/08 08:23:53 ru Exp $
29 # $DragonFly: src/release/scripts/Attic/tar.sh,v 1.2 2003/06/17 04:27:21 dillon Exp $
30 #
31
32 #
33 # For use on the fixit floppy.  External programs required:
34 # cpio(1), find(1), test(1)
35 #
36
37
38 archive=${TAPE:-/dev/rsa0}
39 blocksize="20"
40 device=""
41 mode="none"
42 verbose=""
43
44 usage()
45 {
46         echo "usage: tar -{c|t|x} [-v] [-b blocksize] [-f archive] [files...]" 1>&2
47         exit 64         # EX_USAGE
48 }
49
50 #
51 # Prepend a hyphen to the first arg if necessary, so the traditional form
52 # ``tar xvf /dev/foobar'' will work, too.  More kludgy legacy forms are not
53 # supported however.
54 #
55
56 if [ $# -lt 1 ] ; then
57         usage
58 fi
59
60 case "$1" in
61         -*)     break
62                 ;;
63         *)      tmp="$1"
64                 shift
65                 set -- -$tmp "$@"
66                 ;;
67 esac
68
69 while getopts "ctxvb:f:" option
70 do
71         case $option in
72                 [ctx])
73                         if [ $mode = "none" ] ; then
74                                 mode=$option
75                         else
76                                 usage
77                         fi
78                         ;;
79                 v)
80                         verbose="-v"
81                         ;;
82                 b)
83                         blocksize="${OPTARG}"
84                         ;;
85                 f)
86                         archive="${OPTARG## }"
87                         ;;
88                 *)
89                         usage
90                         ;;
91         esac
92 done
93
94 shift $(($OPTIND - 1))
95
96 if [ "X${archive}" != "X-" ] ; then
97         device="-F ${archive}"
98 # else: use stdin or stdout, which is the default for cpio
99 fi
100
101 case $mode in
102         none)
103                 usage
104                 ;;
105         t)
106                 exec cpio -it $verbose $device --block-size="$blocksize" "$@"
107                 ;;
108         x)
109                 exec cpio -idmu $verbose $device --block-size="$blocksize" "$@"
110                 ;;
111         c)
112                 if [ $# -eq 0 ] ; then
113                         # use current dir -- slightly bogus
114                         set -- "."
115                 fi
116                 find "$@" -print |\
117                     cpio -o -H ustar $verbose $device --block-size="$blocksize"
118                 exit $?
119                 ;;
120 esac