Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 Jul 2015 17:03:06 +0000
From:      "emaste (Ed Maste)" <phabric-noreply@FreeBSD.org>
To:        freebsd-toolchain@freebsd.org
Subject:   [Differential] [Request, 25 lines] D3237: Fix ar default deterministic mode for -x
Message-ID:  <differential-rev-PHID-DREV-p6eaneh7blvpd5hxa2t2-req@FreeBSD.org>

next in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]
emaste created this revision.
emaste added reviewers: jhibbits, bapt, brooks.
emaste added subscribers: freebsd-toolchain-list, jhibbits.

REVISION SUMMARY
  Reported by: @jhibbits

REVISION DETAIL
  https://reviews.freebsd.org/D3237

AFFECTED FILES
  usr.bin/ar/ar.c

CHANGE DETAILS
  diff --git a/usr.bin/ar/ar.c b/usr.bin/ar/ar.c
  --- a/usr.bin/ar/ar.c
  +++ b/usr.bin/ar/ar.c
  @@ -101,11 +101,12 @@
   	char		*p;
   	size_t		 len;
   	int		 i, opt;
  +	int		 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 +123,12 @@
   				/* 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 +185,8 @@
   			set_mode(bsdar, opt);
   			break;
   		case 'D':
  -			bsdar->options |= AR_D;
  +			Dflag = 1;
  +			Uflag = 0;
   			break;
   		case 'f':
   		case 'T':
  @@ -222,7 +226,8 @@
   			set_mode(bsdar, opt);
   			break;
   		case 'U':
  -			bsdar->options &= ~AR_D;
  +			Uflag = 1;
  +			Dflag = 0;
   			break;
   		case 'u':
   			bsdar->options |= AR_U;
  @@ -275,16 +280,22 @@
   		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)
   		only_mode(bsdar, "-b", "mqr");
   	if (bsdar->options & AR_C)
   		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)

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: emaste, jhibbits, bapt, brooks
Cc: jhibbits, freebsd-toolchain-list

[-- Attachment #2 --]
diff --git a/usr.bin/ar/ar.c b/usr.bin/ar/ar.c
--- a/usr.bin/ar/ar.c
+++ b/usr.bin/ar/ar.c
@@ -101,11 +101,12 @@
 	char		*p;
 	size_t		 len;
 	int		 i, opt;
+	int		 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 +123,12 @@
 				/* 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 +185,8 @@
 			set_mode(bsdar, opt);
 			break;
 		case 'D':
-			bsdar->options |= AR_D;
+			Dflag = 1;
+			Uflag = 0;
 			break;
 		case 'f':
 		case 'T':
@@ -222,7 +226,8 @@
 			set_mode(bsdar, opt);
 			break;
 		case 'U':
-			bsdar->options &= ~AR_D;
+			Uflag = 1;
+			Dflag = 0;
 			break;
 		case 'u':
 			bsdar->options |= AR_U;
@@ -275,16 +280,22 @@
 		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)
 		only_mode(bsdar, "-b", "mqr");
 	if (bsdar->options & AR_C)
 		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)


Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?differential-rev-PHID-DREV-p6eaneh7blvpd5hxa2t2-req>