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 " projects" 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));