File: | src/usr.sbin/mtree/mtree.c |
Warning: | line 132, column 2 Value stored to 'argv' is never read |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | /* $OpenBSD: mtree.c,v 1.27 2021/11/15 15:14:24 millert Exp $ */ |
2 | /* $NetBSD: mtree.c,v 1.7 1996/09/05 23:29:22 thorpej Exp $ */ |
3 | |
4 | /*- |
5 | * Copyright (c) 1989, 1990, 1993 |
6 | * The Regents of the University of California. 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 | * 3. Neither the name of the University nor the names of its contributors |
17 | * may be used to endorse or promote products derived from this software |
18 | * without specific prior written permission. |
19 | * |
20 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
21 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
22 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
23 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
24 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
25 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
26 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
27 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
28 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
29 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
30 | * SUCH DAMAGE. |
31 | */ |
32 | |
33 | #include <sys/stat.h> |
34 | #include <err.h> |
35 | #include <errno(*__errno()).h> |
36 | #include <unistd.h> |
37 | #include <stdio.h> |
38 | #include <limits.h> |
39 | #include <fts.h> |
40 | #include <grp.h> |
41 | #include <pwd.h> |
42 | #include "mtree.h" |
43 | #include "extern.h" |
44 | |
45 | extern u_int32_t crc_total; |
46 | |
47 | int ftsoptions = FTS_PHYSICAL0x0010; |
48 | int cflag, dflag, eflag, iflag, lflag, nflag, qflag, rflag, sflag, tflag, |
49 | uflag, Uflag; |
50 | u_int keys; |
51 | char fullpath[PATH_MAX1024]; |
52 | |
53 | static void usage(void); |
54 | |
55 | int |
56 | main(int argc, char *argv[]) |
57 | { |
58 | int ch; |
59 | char *dir, *p; |
60 | int status; |
61 | |
62 | dir = NULL((void *)0); |
63 | keys = KEYDEFAULT(0x000004 | 0x000080 | 0x000100 | 0x001000 | 0x002000 | 0x004000 | 0x010000); |
64 | while ((ch = getopt(argc, argv, "cdef:iK:k:lnp:qrs:tUux")) != -1) |
65 | switch(ch) { |
66 | case 'c': |
67 | cflag = 1; |
68 | break; |
69 | case 'd': |
70 | dflag = 1; |
71 | break; |
72 | case 'e': |
73 | eflag = 1; |
74 | break; |
75 | case 'f': |
76 | if (!(freopen(optarg, "r", stdin(&__sF[0])))) |
77 | error("%s: %s", optarg, strerror(errno(*__errno()))); |
78 | break; |
79 | case 'i': |
80 | iflag = 1; |
81 | break; |
82 | case 'K': |
83 | while ((p = strsep(&optarg, " \t,")) != NULL((void *)0)) |
84 | if (*p != '\0') |
85 | keys |= parsekey(p, NULL((void *)0)); |
86 | break; |
87 | case 'k': |
88 | keys = F_TYPE0x008000; |
89 | while ((p = strsep(&optarg, " \t,")) != NULL((void *)0)) |
90 | if (*p != '\0') |
91 | keys |= parsekey(p, NULL((void *)0)); |
92 | break; |
93 | case 'l': |
94 | lflag = 1; |
95 | break; |
96 | case 'n': |
97 | nflag = 1; |
98 | break; |
99 | case 'p': |
100 | dir = optarg; |
101 | break; |
102 | case 'q': |
103 | qflag = 1; |
104 | break; |
105 | case 'r': |
106 | rflag = 1; |
107 | break; |
108 | case 's': |
109 | sflag = 1; |
110 | crc_total = ~strtol(optarg, &p, 0); |
111 | if (*p) |
112 | error("illegal seed value -- %s", optarg); |
113 | break; |
114 | case 't': |
115 | tflag = 1; |
116 | break; |
117 | case 'U': |
118 | Uflag = 1; |
119 | uflag = 1; |
120 | break; |
121 | case 'u': |
122 | uflag = 1; |
123 | break; |
124 | case 'x': |
125 | ftsoptions |= FTS_XDEV0x0040; |
126 | break; |
127 | case '?': |
128 | default: |
129 | usage(); |
130 | } |
131 | argc -= optind; |
132 | argv += optind; |
Value stored to 'argv' is never read | |
133 | |
134 | if (argc) |
135 | usage(); |
136 | |
137 | /* |
138 | * If uflag is set we can't make any pledges because we must be able |
139 | * to chown and place setugid bits. Make sure that we're pledged |
140 | * when -c was specified. |
141 | */ |
142 | if (!uflag || cflag) { |
143 | if (rflag && tflag) { |
144 | if (pledge("stdio rpath cpath getpw fattr", NULL((void *)0)) == -1) |
145 | err(1, "pledge"); |
146 | } else if (rflag && !tflag) { |
147 | if (pledge("stdio rpath cpath getpw", NULL((void *)0)) == -1) |
148 | err(1, "pledge"); |
149 | } else if (!rflag && tflag) { |
150 | if (pledge("stdio rpath getpw fattr", NULL((void *)0)) == -1) |
151 | err(1, "pledge"); |
152 | } else { |
153 | if (pledge("stdio rpath getpw", NULL((void *)0)) == -1) |
154 | err(1, "pledge"); |
155 | } |
156 | } |
157 | |
158 | /* Keep passwd and group files open for faster lookups. */ |
159 | setpassent(1); |
160 | setgroupent(1); |
161 | |
162 | if (dir && chdir(dir)) |
163 | error("%s: %s", dir, strerror(errno(*__errno()))); |
164 | |
165 | if ((cflag || sflag) && !getcwd(fullpath, sizeof fullpath)) |
166 | error("getcwd: %s", strerror(errno(*__errno()))); |
167 | |
168 | if (lflag == 1 && uflag == 1) |
169 | error("-l and -u flags are mutually exclusive"); |
170 | |
171 | if (cflag) { |
172 | cwalk(); |
173 | exit(0); |
174 | } |
175 | status = verify(); |
176 | if (Uflag && (status == MISMATCHEXIT2)) |
177 | status = 0; |
178 | exit(status); |
179 | } |
180 | |
181 | static void |
182 | usage(void) |
183 | { |
184 | (void)fprintf(stderr(&__sF[2]), |
185 | "usage: mtree [-cdeilnqrtUux] [-f spec] [-K keywords] " |
186 | "[-k keywords] [-p path]\n" |
187 | " [-s seed]\n"); |
188 | exit(1); |
189 | } |