Lines Matching refs:bsdar

93 static void	set_mode(struct bsdar *bsdar, char opt);
94 static void only_mode(struct bsdar *bsdar, const char *opt,
102 struct bsdar *bsdar, bsdar_storage;
107 bsdar = &bsdar_storage;
108 memset(bsdar, 0, sizeof(*bsdar));
112 if ((bsdar->progname = getprogname()) == NULL)
113 bsdar->progname = "ar";
117 len = strlen(bsdar->progname);
119 strcmp(bsdar->progname + len - strlen("ranlib"), "ranlib") == 0) {
151 bsdar->options |= AR_D;
152 bsdar->options |= AR_S;
153 while ((bsdar->filename = *argv++) != NULL)
154 ar_mode_s(bsdar);
164 bsdar_errc(bsdar, EX_SOFTWARE, errno,
176 bsdar->options |= AR_A;
180 bsdar->options |= AR_B;
183 bsdar->options |= AR_CC;
186 bsdar->options |= AR_C;
189 set_mode(bsdar, opt);
197 bsdar->options |= AR_TR;
206 set_mode(bsdar, opt);
209 set_mode(bsdar, opt);
212 bsdar->options |= AR_O;
215 set_mode(bsdar, opt);
218 set_mode(bsdar, opt);
221 set_mode(bsdar, opt);
224 bsdar->options |= AR_SS;
227 bsdar->options |= AR_S;
230 set_mode(bsdar, opt);
237 bsdar->options |= AR_U;
243 bsdar->options |= AR_V;
246 set_mode(bsdar, opt);
261 if (*argv == NULL && bsdar->mode != 'M')
264 if (bsdar->options & AR_A && bsdar->options & AR_B)
265 bsdar_errc(bsdar, EX_USAGE, 0,
268 if (bsdar->options & AR_J && bsdar->options & AR_Z)
269 bsdar_errc(bsdar, EX_USAGE, 0,
272 if (bsdar->options & AR_S && bsdar->options & AR_SS)
273 bsdar_errc(bsdar, EX_USAGE, 0,
276 if (bsdar->options & (AR_A | AR_B)) {
278 bsdar_errc(bsdar, EX_USAGE, 0,
280 if ((bsdar->posarg = basename(*argv)) == NULL)
281 bsdar_errc(bsdar, EX_SOFTWARE, errno,
288 if (Dflag || (Uflag == 0 && (bsdar->mode == 'q' || bsdar->mode == 'r' ||
289 (bsdar->mode == '\0' && bsdar->options & AR_S))))
290 bsdar->options |= AR_D;
292 if (bsdar->options & AR_A)
293 only_mode(bsdar, "-a", "mqr");
294 if (bsdar->options & AR_B)
295 only_mode(bsdar, "-b", "mqr");
296 if (bsdar->options & AR_C)
297 only_mode(bsdar, "-c", "qr");
298 if (bsdar->options & AR_CC)
299 only_mode(bsdar, "-C", "x");
301 only_mode(bsdar, "-D", "qr");
303 only_mode(bsdar, "-U", "qr");
304 if (bsdar->options & AR_O)
305 only_mode(bsdar, "-o", "x");
306 if (bsdar->options & AR_SS)
307 only_mode(bsdar, "-S", "mqr");
308 if (bsdar->options & AR_U)
309 only_mode(bsdar, "-u", "qrx");
311 if (bsdar->mode == 'M') {
312 ar_mode_script(bsdar);
316 if ((bsdar->filename = *argv) == NULL)
319 bsdar->argc = --argc;
320 bsdar->argv = ++argv;
322 if ((!bsdar->mode || strchr("ptx", bsdar->mode)) &&
323 bsdar->options & AR_S) {
324 ar_mode_s(bsdar);
325 if (!bsdar->mode)
329 switch(bsdar->mode) {
331 ar_mode_d(bsdar);
334 ar_mode_m(bsdar);
337 ar_mode_p(bsdar);
340 ar_mode_q(bsdar);
343 ar_mode_r(bsdar);
346 ar_mode_t(bsdar);
349 ar_mode_x(bsdar);
356 for (i = 0; i < bsdar->argc; i++)
357 if (bsdar->argv[i] != NULL)
358 bsdar_warnc(bsdar, 0, "%s: not found in archive",
359 bsdar->argv[i]);
365 set_mode(struct bsdar *bsdar, char opt)
368 if (bsdar->mode != '\0' && bsdar->mode != opt)
369 bsdar_errc(bsdar, EX_USAGE, 0,
370 "Can't specify both -%c and -%c", opt, bsdar->mode);
371 bsdar->mode = opt;
375 only_mode(struct bsdar *bsdar, const char *opt, const char *valid_modes)
378 if (strchr(valid_modes, bsdar->mode) == NULL)
379 bsdar_errc(bsdar, EX_USAGE, 0,
380 "Option %s is not permitted in mode -%c", opt, bsdar->mode);