svn commit: r286024 - head/usr.bin/ar
Ed Maste
emaste at FreeBSD.org
Wed Jul 29 17:34:27 UTC 2015
Author: emaste
Date: Wed Jul 29 17:34:26 2015
New Revision: 286024
URL: https://svnweb.freebsd.org/changeset/base/286024
Log:
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
Modified:
head/usr.bin/ar/ar.c
Modified: head/usr.bin/ar/ar.c
==============================================================================
--- head/usr.bin/ar/ar.c Wed Jul 29 17:28:04 2015 (r286023)
+++ head/usr.bin/ar/ar.c Wed Jul 29 17:34:26 2015 (r286024)
@@ -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)
More information about the svn-src-all
mailing list