From owner-svn-src-projects@FreeBSD.ORG  Thu Dec 20 23:06:47 2012
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52])
 by hub.freebsd.org (Postfix) with ESMTP id E4AB2ACB;
 Thu, 20 Dec 2012 23:06:47 +0000 (UTC)
 (envelope-from brooks@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 by mx1.freebsd.org (Postfix) with ESMTP id B067B8FC0C;
 Thu, 20 Dec 2012 23:06:47 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
 by svn.freebsd.org (8.14.5/8.14.5) with ESMTP id qBKN6lG5040521;
 Thu, 20 Dec 2012 23:06:47 GMT (envelope-from brooks@svn.freebsd.org)
Received: (from brooks@localhost)
 by svn.freebsd.org (8.14.5/8.14.5/Submit) id qBKN6lrf040520;
 Thu, 20 Dec 2012 23:06:47 GMT (envelope-from brooks@svn.freebsd.org)
Message-Id: <201212202306.qBKN6lrf040520@svn.freebsd.org>
From: Brooks Davis <brooks@FreeBSD.org>
Date: Thu, 20 Dec 2012 23:06:47 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r244521 - projects/mtree/contrib/install
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.14
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 20 Dec 2012 23:06:48 -0000

Author: brooks
Date: Thu Dec 20 23:06:47 2012
New Revision: 244521
URL: http://svnweb.freebsd.org/changeset/base/244521

Log:
  Don't unlink or displace the file just before calling install().  That's
  on of the first things it does.

Modified:
  projects/mtree/contrib/install/xinstall.c

Modified: projects/mtree/contrib/install/xinstall.c
==============================================================================
--- projects/mtree/contrib/install/xinstall.c	Thu Dec 20 23:01:53 2012	(r244520)
+++ projects/mtree/contrib/install/xinstall.c	Thu Dec 20 23:06:47 2012	(r244521)
@@ -371,33 +371,16 @@ main(int argc, char *argv[])
 		/* NOTREACHED */
 	}
 
-	if (!no_target) {
+	if (!no_target && !dolink) {
 		/* makelink() handles checks for links */
-		if (!dolink) {
-			if (stat(*argv, &from_sb))
-				err(1, "%s: stat", *argv);
-			if (!S_ISREG(to_sb.st_mode))
-				errx(1, "%s: not a regular file", to_name);
-			if (to_sb.st_dev == from_sb.st_dev &&
-			    to_sb.st_ino == from_sb.st_ino)
-				errx(1, "%s and %s are the same file", *argv,
-				    to_name);
-		}
-		/*
-		 * Unlink now... avoid ETXTBSY errors later.  Try and turn
-		 * off the append/immutable bits -- if we fail, go ahead,
-		 * it might work.
-		 */
-#if ! HAVE_NBTOOL_CONFIG_H
-#define	NOCHANGEBITS	(UF_IMMUTABLE | UF_APPEND | SF_IMMUTABLE | SF_APPEND)
-		if (to_sb.st_flags & NOCHANGEBITS)
-			(void)chflags(to_name,
-			    to_sb.st_flags & ~(NOCHANGEBITS));
-#endif
-		if (dobackup)
-			backup(to_name);
-		else if (!dorename)
-			(void)unlink(to_name);
+		if (stat(*argv, &from_sb))
+			err(1, "%s: stat", *argv);
+		if (!S_ISREG(to_sb.st_mode))
+			errx(1, "%s: not a regular file", to_name);
+		if (to_sb.st_dev == from_sb.st_dev &&
+		    to_sb.st_ino == from_sb.st_ino)
+			errx(1, "%s and %s are the same file", *argv,
+			    to_name);
 	}
 	install(*argv, to_name, iflags);
 	exit(0);
@@ -676,6 +659,7 @@ install(char *from_name, char *to_name, 
 	 * it might work.
 	 */
 #if ! HAVE_NBTOOL_CONFIG_H
+#define	NOCHANGEBITS	(UF_IMMUTABLE | UF_APPEND | SF_IMMUTABLE | SF_APPEND)
 	if (stat(to_name, &to_sb) == 0 &&
 	    to_sb.st_flags & (NOCHANGEBITS))
 		(void)chflags(to_name, to_sb.st_flags & ~(NOCHANGEBITS));