xref: /original-bsd/usr.sbin/mtree/mtree.c (revision eeb6993a)
1 /*-
2  * Copyright (c) 1989 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  */
7 
8 #ifndef lint
9 char copyright[] =
10 "@(#) Copyright (c) 1990 The Regents of the University of California.\n\
11  All rights reserved.\n";
12 #endif /* not lint */
13 
14 #ifndef lint
15 static char sccsid[] = "@(#)mtree.c	5.8 (Berkeley) 05/25/90";
16 #endif /* not lint */
17 
18 #include <sys/param.h>
19 #include <sys/stat.h>
20 #include <errno.h>
21 #include <stdio.h>
22 #include <fts.h>
23 #include "mtree.h"
24 
25 NODE *root;
26 int exitval;
27 int cflag, dflag, eflag, rflag, uflag;
28 
29 main(argc, argv)
30 	int argc;
31 	char **argv;
32 {
33 	extern int ftsoptions, optind;
34 	extern char *optarg;
35 	int ch;
36 	char *dir;
37 
38 	dir = (char *)NULL;
39 	while ((ch = getopt(argc, argv, "cdef:p:rux")) != EOF)
40 		switch((char)ch) {
41 		case 'c':
42 			cflag = 1;
43 			break;
44 		case 'd':
45 			dflag = 1;
46 			break;
47 		case 'e':
48 			eflag = 1;
49 			break;
50 		case 'f':
51 			if (!(freopen(optarg, "r", stdin))) {
52 				(void)fprintf(stderr,
53 				    "mtree: can't read %s.\n", optarg);
54 				exit(1);
55 			}
56 			break;
57 		case 'p':
58 			dir = optarg;
59 			break;
60 		case 'r':
61 			rflag = 1;
62 			break;
63 		case 'u':
64 			uflag = 1;
65 			break;
66 		case 'x':
67 			ftsoptions |= FTS_XDEV;
68 			break;
69 		case '?':
70 		default:
71 			usage();
72 		}
73 	argc -= optind;
74 	if (argc)
75 		usage();
76 
77 	if (!cflag)
78 		spec();
79 
80 	if (dir && chdir(dir)) {
81 		(void)fprintf(stderr,
82 		    "mtree: %s: %s\n", dir, strerror(errno));
83 		exit(1);
84 	}
85 
86 	if (cflag)
87 		cwalk();
88 	else
89 		verify();
90 	exit(exitval);
91 }
92 
93 usage()
94 {
95 	(void)fprintf(stderr,
96 	    "usage: mtree [-cderux] [-p path] [-f spec]\n");
97 	exit(1);
98 }
99