Lines 72-78
__FBSDID("$FreeBSD$");
Link Here
|
72 |
#include <stdio.h> |
72 |
#include <stdio.h> |
73 |
#include <stdlib.h> |
73 |
#include <stdlib.h> |
74 |
#include <string.h> |
74 |
#include <string.h> |
75 |
#include <sysexits.h> |
|
|
76 |
|
75 |
|
77 |
#include "ar.h" |
76 |
#include "ar.h" |
78 |
|
77 |
|
Lines 102-111
main(int argc, char **argv)
Link Here
|
102 |
struct bsdar *bsdar, bsdar_storage; |
101 |
struct bsdar *bsdar, bsdar_storage; |
103 |
char *p; |
102 |
char *p; |
104 |
size_t len; |
103 |
size_t len; |
105 |
int i, opt, Dflag, Uflag; |
104 |
int exitcode, i, opt, Dflag, Uflag; |
106 |
|
105 |
|
107 |
bsdar = &bsdar_storage; |
106 |
bsdar = &bsdar_storage; |
108 |
memset(bsdar, 0, sizeof(*bsdar)); |
107 |
memset(bsdar, 0, sizeof(*bsdar)); |
|
|
108 |
exitcode = EXIT_SUCCESS; |
109 |
Dflag = 0; |
109 |
Dflag = 0; |
110 |
Uflag = 0; |
110 |
Uflag = 0; |
111 |
|
111 |
|
Lines 151-159
main(int argc, char **argv)
Link Here
|
151 |
bsdar->options |= AR_D; |
151 |
bsdar->options |= AR_D; |
152 |
bsdar->options |= AR_S; |
152 |
bsdar->options |= AR_S; |
153 |
while ((bsdar->filename = *argv++) != NULL) |
153 |
while ((bsdar->filename = *argv++) != NULL) |
154 |
ar_mode_s(bsdar); |
154 |
if (ar_mode_s(bsdar)) |
|
|
155 |
exitcode = EXIT_FAILURE; |
155 |
|
156 |
|
156 |
exit(EX_OK); |
157 |
exit(exitcode); |
157 |
} else { |
158 |
} else { |
158 |
if (argc < 2) |
159 |
if (argc < 2) |
159 |
bsdar_usage(); |
160 |
bsdar_usage(); |
Lines 161-167
main(int argc, char **argv)
Link Here
|
161 |
if (*argv[1] != '-') { |
162 |
if (*argv[1] != '-') { |
162 |
len = strlen(argv[1]) + 2; |
163 |
len = strlen(argv[1]) + 2; |
163 |
if ((p = malloc(len)) == NULL) |
164 |
if ((p = malloc(len)) == NULL) |
164 |
bsdar_errc(bsdar, EX_SOFTWARE, errno, |
165 |
bsdar_errc(bsdar, EXIT_FAILURE, errno, |
165 |
"malloc failed"); |
166 |
"malloc failed"); |
166 |
*p = '-'; |
167 |
*p = '-'; |
167 |
(void)strlcpy(p + 1, argv[1], len - 1); |
168 |
(void)strlcpy(p + 1, argv[1], len - 1); |
Lines 262-284
main(int argc, char **argv)
Link Here
|
262 |
bsdar_usage(); |
263 |
bsdar_usage(); |
263 |
|
264 |
|
264 |
if (bsdar->options & AR_A && bsdar->options & AR_B) |
265 |
if (bsdar->options & AR_A && bsdar->options & AR_B) |
265 |
bsdar_errc(bsdar, EX_USAGE, 0, |
266 |
bsdar_errc(bsdar, EXIT_FAILURE, 0, |
266 |
"only one of -a and -[bi] options allowed"); |
267 |
"only one of -a and -[bi] options allowed"); |
267 |
|
268 |
|
268 |
if (bsdar->options & AR_J && bsdar->options & AR_Z) |
269 |
if (bsdar->options & AR_J && bsdar->options & AR_Z) |
269 |
bsdar_errc(bsdar, EX_USAGE, 0, |
270 |
bsdar_errc(bsdar, EXIT_FAILURE, 0, |
270 |
"only one of -j and -z options allowed"); |
271 |
"only one of -j and -z options allowed"); |
271 |
|
272 |
|
272 |
if (bsdar->options & AR_S && bsdar->options & AR_SS) |
273 |
if (bsdar->options & AR_S && bsdar->options & AR_SS) |
273 |
bsdar_errc(bsdar, EX_USAGE, 0, |
274 |
bsdar_errc(bsdar, EXIT_FAILURE, 0, |
274 |
"only one of -s and -S options allowed"); |
275 |
"only one of -s and -S options allowed"); |
275 |
|
276 |
|
276 |
if (bsdar->options & (AR_A | AR_B)) { |
277 |
if (bsdar->options & (AR_A | AR_B)) { |
277 |
if (*argv == NULL) |
278 |
if (*argv == NULL) |
278 |
bsdar_errc(bsdar, EX_USAGE, 0, |
279 |
bsdar_errc(bsdar, EXIT_FAILURE, 0, |
279 |
"no position operand specified"); |
280 |
"no position operand specified"); |
280 |
if ((bsdar->posarg = basename(*argv)) == NULL) |
281 |
if ((bsdar->posarg = basename(*argv)) == NULL) |
281 |
bsdar_errc(bsdar, EX_SOFTWARE, errno, |
282 |
bsdar_errc(bsdar, EXIT_FAILURE, errno, |
282 |
"basename failed"); |
283 |
"basename failed"); |
283 |
argc--; |
284 |
argc--; |
284 |
argv++; |
285 |
argv++; |
Lines 310-316
main(int argc, char **argv)
Link Here
|
310 |
|
311 |
|
311 |
if (bsdar->mode == 'M') { |
312 |
if (bsdar->mode == 'M') { |
312 |
ar_mode_script(bsdar); |
313 |
ar_mode_script(bsdar); |
313 |
exit(EX_OK); |
314 |
exit(EXIT_SUCCESS); |
314 |
} |
315 |
} |
315 |
|
316 |
|
316 |
if ((bsdar->filename = *argv) == NULL) |
317 |
if ((bsdar->filename = *argv) == NULL) |
Lines 321-364
main(int argc, char **argv)
Link Here
|
321 |
|
322 |
|
322 |
if ((!bsdar->mode || strchr("ptx", bsdar->mode)) && |
323 |
if ((!bsdar->mode || strchr("ptx", bsdar->mode)) && |
323 |
bsdar->options & AR_S) { |
324 |
bsdar->options & AR_S) { |
324 |
ar_mode_s(bsdar); |
325 |
exitcode = ar_mode_s(bsdar); |
325 |
if (!bsdar->mode) |
326 |
if (!bsdar->mode) |
326 |
exit(EX_OK); |
327 |
exit(exitcode); |
327 |
} |
328 |
} |
328 |
|
329 |
|
329 |
switch(bsdar->mode) { |
330 |
switch(bsdar->mode) { |
330 |
case 'd': |
331 |
case 'd': |
331 |
ar_mode_d(bsdar); |
332 |
exitcode = ar_mode_d(bsdar); |
332 |
break; |
333 |
break; |
333 |
case 'm': |
334 |
case 'm': |
334 |
ar_mode_m(bsdar); |
335 |
exitcode = ar_mode_m(bsdar); |
335 |
break; |
336 |
break; |
336 |
case 'p': |
337 |
case 'p': |
337 |
ar_mode_p(bsdar); |
338 |
exitcode = ar_mode_p(bsdar); |
338 |
break; |
339 |
break; |
339 |
case 'q': |
340 |
case 'q': |
340 |
ar_mode_q(bsdar); |
341 |
exitcode = ar_mode_q(bsdar); |
341 |
break; |
342 |
break; |
342 |
case 'r': |
343 |
case 'r': |
343 |
ar_mode_r(bsdar); |
344 |
exitcode = ar_mode_r(bsdar); |
344 |
break; |
345 |
break; |
345 |
case 't': |
346 |
case 't': |
346 |
ar_mode_t(bsdar); |
347 |
exitcode = ar_mode_t(bsdar); |
347 |
break; |
348 |
break; |
348 |
case 'x': |
349 |
case 'x': |
349 |
ar_mode_x(bsdar); |
350 |
exitcode = ar_mode_x(bsdar); |
350 |
break; |
351 |
break; |
351 |
default: |
352 |
default: |
352 |
bsdar_usage(); |
353 |
bsdar_usage(); |
353 |
/* NOTREACHED */ |
354 |
/* NOTREACHED */ |
354 |
} |
355 |
} |
355 |
|
356 |
|
356 |
for (i = 0; i < bsdar->argc; i++) |
357 |
for (i = 0; i < bsdar->argc; i++) { |
357 |
if (bsdar->argv[i] != NULL) |
358 |
if (bsdar->argv[i] != NULL) { |
358 |
bsdar_warnc(bsdar, 0, "%s: not found in archive", |
359 |
bsdar_warnc(bsdar, 0, "%s: not found in archive", |
359 |
bsdar->argv[i]); |
360 |
bsdar->argv[i]); |
|
|
361 |
exitcode = EXIT_FAILURE; |
362 |
} |
363 |
} |
360 |
|
364 |
|
361 |
exit(EX_OK); |
365 |
exit(exitcode); |
362 |
} |
366 |
} |
363 |
|
367 |
|
364 |
static void |
368 |
static void |
Lines 366-372
set_mode(struct bsdar *bsdar, char opt)
Link Here
|
366 |
{ |
370 |
{ |
367 |
|
371 |
|
368 |
if (bsdar->mode != '\0' && bsdar->mode != opt) |
372 |
if (bsdar->mode != '\0' && bsdar->mode != opt) |
369 |
bsdar_errc(bsdar, EX_USAGE, 0, |
373 |
bsdar_errc(bsdar, EXIT_FAILURE, 0, |
370 |
"Can't specify both -%c and -%c", opt, bsdar->mode); |
374 |
"Can't specify both -%c and -%c", opt, bsdar->mode); |
371 |
bsdar->mode = opt; |
375 |
bsdar->mode = opt; |
372 |
} |
376 |
} |
Lines 376-382
only_mode(struct bsdar *bsdar, const char *opt, const char *valid_modes)
Link Here
|
376 |
{ |
380 |
{ |
377 |
|
381 |
|
378 |
if (strchr(valid_modes, bsdar->mode) == NULL) |
382 |
if (strchr(valid_modes, bsdar->mode) == NULL) |
379 |
bsdar_errc(bsdar, EX_USAGE, 0, |
383 |
bsdar_errc(bsdar, EXIT_FAILURE, 0, |
380 |
"Option %s is not permitted in mode -%c", opt, bsdar->mode); |
384 |
"Option %s is not permitted in mode -%c", opt, bsdar->mode); |
381 |
} |
385 |
} |
382 |
|
386 |
|
Lines 395-401
bsdar_usage(void)
Link Here
|
395 |
(void)fprintf(stderr, "\tar -t [-Tv] archive [file ...]\n"); |
399 |
(void)fprintf(stderr, "\tar -t [-Tv] archive [file ...]\n"); |
396 |
(void)fprintf(stderr, "\tar -x [-CTouv] archive [file ...]\n"); |
400 |
(void)fprintf(stderr, "\tar -x [-CTouv] archive [file ...]\n"); |
397 |
(void)fprintf(stderr, "\tar -V\n"); |
401 |
(void)fprintf(stderr, "\tar -V\n"); |
398 |
exit(EX_USAGE); |
402 |
exit(EXIT_FAILURE); |
399 |
} |
403 |
} |
400 |
|
404 |
|
401 |
static void |
405 |
static void |
Lines 404-422
ranlib_usage(void)
Link Here
|
404 |
|
408 |
|
405 |
(void)fprintf(stderr, "usage: ranlib [-DtU] archive ...\n"); |
409 |
(void)fprintf(stderr, "usage: ranlib [-DtU] archive ...\n"); |
406 |
(void)fprintf(stderr, "\tranlib -V\n"); |
410 |
(void)fprintf(stderr, "\tranlib -V\n"); |
407 |
exit(EX_USAGE); |
411 |
exit(EXIT_FAILURE); |
408 |
} |
412 |
} |
409 |
|
413 |
|
410 |
static void |
414 |
static void |
411 |
bsdar_version(void) |
415 |
bsdar_version(void) |
412 |
{ |
416 |
{ |
413 |
(void)printf("BSD ar %s - %s\n", BSDAR_VERSION, archive_version_string()); |
417 |
(void)printf("BSD ar %s - %s\n", BSDAR_VERSION, archive_version_string()); |
414 |
exit(EX_OK); |
418 |
exit(EXIT_SUCCESS); |
415 |
} |
419 |
} |
416 |
|
420 |
|
417 |
static void |
421 |
static void |
418 |
ranlib_version(void) |
422 |
ranlib_version(void) |
419 |
{ |
423 |
{ |
420 |
(void)printf("ranlib %s - %s\n", BSDAR_VERSION, archive_version_string()); |
424 |
(void)printf("ranlib %s - %s\n", BSDAR_VERSION, archive_version_string()); |
421 |
exit(EX_OK); |
425 |
exit(EXIT_SUCCESS); |
422 |
} |
426 |
} |