This commit was generated by cvs2svn to track changes on a CVS vendor
[unix-history] / usr.sbin / mtree / mtree.c
CommitLineData
15637ed4
RG
1/*-
2 * Copyright (c) 1989 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by the University of
16 * California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34#ifndef lint
35char copyright[] =
36"@(#) Copyright (c) 1990 The Regents of the University of California.\n\
37 All rights reserved.\n";
38#endif /* not lint */
39
40#ifndef lint
4e97a0eb 41static char sccsid[] = "@(#)mtree.c 5.10 (Berkeley) 4/17/92";
15637ed4
RG
42#endif /* not lint */
43
44#include <sys/param.h>
45#include <sys/stat.h>
46#include <errno.h>
4e97a0eb 47#include <unistd.h>
15637ed4
RG
48#include <stdio.h>
49#include <fts.h>
50#include "mtree.h"
4e97a0eb 51#include "extern.h"
15637ed4 52
4e97a0eb 53int crc_total;
15637ed4 54
4e97a0eb
NW
55int ftsoptions = FTS_PHYSICAL;
56int cflag, dflag, eflag, rflag, sflag, uflag;
57u_short keys;
58char fullpath[MAXPATHLEN];
59
60static void usage __P((void));
61
62int
15637ed4
RG
63main(argc, argv)
64 int argc;
4e97a0eb 65 char *argv[];
15637ed4 66{
4e97a0eb 67 extern int optind;
15637ed4
RG
68 extern char *optarg;
69 int ch;
4e97a0eb 70 char *dir, *p;
15637ed4 71
4e97a0eb
NW
72 dir = NULL;
73 keys = KEYDEFAULT;
74 while ((ch = getopt(argc, argv, "cdef:K:k:p:rs:ux")) != EOF)
15637ed4
RG
75 switch((char)ch) {
76 case 'c':
77 cflag = 1;
78 break;
79 case 'd':
80 dflag = 1;
81 break;
82 case 'e':
83 eflag = 1;
84 break;
85 case 'f':
4e97a0eb
NW
86 if (!(freopen(optarg, "r", stdin)))
87 err("%s: %s", optarg, strerror(errno));
88 break;
89 case 'K':
90 while ((p = strsep(&optarg, " \t,")) != NULL)
91 if (*p != '\0')
92 keys |= parsekey(p, NULL);
93 break;
94 case 'k':
95 keys = F_TYPE;
96 while ((p = strsep(&optarg, " \t,")) != NULL)
97 if (*p != '\0')
98 keys |= parsekey(p, NULL);
15637ed4
RG
99 break;
100 case 'p':
101 dir = optarg;
102 break;
103 case 'r':
104 rflag = 1;
105 break;
4e97a0eb
NW
106 case 's':
107 sflag = 1;
108 crc_total = ~strtol(optarg, &p, 0);
109 if (*p)
110 err("illegal seed value -- %s", optarg);
15637ed4
RG
111 case 'u':
112 uflag = 1;
113 break;
114 case 'x':
115 ftsoptions |= FTS_XDEV;
116 break;
117 case '?':
118 default:
119 usage();
120 }
121 argc -= optind;
4e97a0eb
NW
122 argv += optind;
123
15637ed4
RG
124 if (argc)
125 usage();
126
4e97a0eb
NW
127 if (dir && chdir(dir))
128 err("%s: %s", dir, strerror(errno));
15637ed4 129
4e97a0eb
NW
130 if ((cflag || sflag) && !getwd(fullpath))
131 err("%s", fullpath);
15637ed4 132
4e97a0eb 133 if (cflag) {
15637ed4 134 cwalk();
4e97a0eb
NW
135 exit(0);
136 }
137 exit(verify());
15637ed4
RG
138}
139
4e97a0eb 140static void
15637ed4
RG
141usage()
142{
143 (void)fprintf(stderr,
4e97a0eb 144"usage: mtree [-cderux] [-f spec] [-K key] [-k key] [-p path] [-s seed]\n");
15637ed4
RG
145 exit(1);
146}