ar: Fix deterministic mode default with options other than -q or -r

Reported by:	jhibbits
Reviewed by:	jhibbits
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D3237
This commit is contained in:
Ed Maste 2015-07-29 17:34:26 +00:00
parent 8328babdd0
commit a80ac30b2d

View File

@ -100,12 +100,12 @@ main(int argc, char **argv)
struct bsdar *bsdar, bsdar_storage;
char *p;
size_t len;
int i, opt;
int i, opt, Dflag, Uflag;
bsdar = &bsdar_storage;
memset(bsdar, 0, sizeof(*bsdar));
/* Enable deterministic mode by default. */
bsdar->options |= AR_D;
Dflag = 0;
Uflag = 0;
if ((bsdar->progname = getprogname()) == NULL)
bsdar->progname = "ar";
@ -122,10 +122,12 @@ main(int argc, char **argv)
/* Ignored. */
break;
case 'D':
bsdar->options |= AR_D;
Dflag = 1;
Uflag = 0;
break;
case 'U':
bsdar->options &= ~AR_D;
Uflag = 1;
Dflag = 0;
break;
case 'V':
ranlib_version();
@ -182,7 +184,8 @@ main(int argc, char **argv)
set_mode(bsdar, opt);
break;
case 'D':
bsdar->options |= AR_D;
Dflag = 1;
Uflag = 0;
break;
case 'f':
case 'T':
@ -222,7 +225,8 @@ main(int argc, char **argv)
set_mode(bsdar, opt);
break;
case 'U':
bsdar->options &= ~AR_D;
Uflag = 1;
Dflag = 0;
break;
case 'u':
bsdar->options |= AR_U;
@ -275,6 +279,10 @@ main(int argc, char **argv)
argv++;
}
/* Set determinstic mode for -D, and by default without -U. */
if (Dflag || (Uflag == 0 && (bsdar->mode == 'q' || bsdar->mode == 'r')))
bsdar->options |= AR_D;
if (bsdar->options & AR_A)
only_mode(bsdar, "-a", "mqr");
if (bsdar->options & AR_B)
@ -283,8 +291,10 @@ main(int argc, char **argv)
only_mode(bsdar, "-c", "qr");
if (bsdar->options & AR_CC)
only_mode(bsdar, "-C", "x");
if (bsdar->options & AR_D)
if (Dflag)
only_mode(bsdar, "-D", "qr");
if (Uflag)
only_mode(bsdar, "-U", "qr");
if (bsdar->options & AR_O)
only_mode(bsdar, "-o", "x");
if (bsdar->options & AR_SS)