From owner-svn-src-all@freebsd.org Sat Oct 24 22:00:00 2015 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 35883A1D9BF; Sat, 24 Oct 2015 22:00:00 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EE37F19D4; Sat, 24 Oct 2015 21:59:59 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t9OLxwmD079862; Sat, 24 Oct 2015 21:59:58 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t9OLxwUZ079861; Sat, 24 Oct 2015 21:59:58 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201510242159.t9OLxwUZ079861@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Garrett Cooper Date: Sat, 24 Oct 2015 21:59:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r289896 - head/sys/boot/common X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 24 Oct 2015 22:00:00 -0000 Author: ngie Date: Sat Oct 24 21:59:58 2015 New Revision: 289896 URL: https://svnweb.freebsd.org/changeset/base/289896 Log: Make vers.c creation atomic by using a temporary file, then moving the temporary file to vers.c at the end of the script The previous logic wrote out to vers.c multiple times, so the file could be incorrectly interpreted as being completely written out after one of the echo calls with recursive make, when in reality it was only partially written. Also, in the event the build was interrupted when creating vers.c (small race window), it would have a leftover file that needed to be cleaned up before resuming the build. MFC after: 3 weeks Sponsored by: EMC / Isilon Storage Division Modified: head/sys/boot/common/newvers.sh Modified: head/sys/boot/common/newvers.sh ============================================================================== --- head/sys/boot/common/newvers.sh Sat Oct 24 21:59:22 2015 (r289895) +++ head/sys/boot/common/newvers.sh Sat Oct 24 21:59:58 2015 (r289896) @@ -32,12 +32,16 @@ # # @(#)newvers.sh 8.1 (Berkeley) 4/20/94 +tempfile=$(mktemp tmp.XXXXXX) || exit +trap "rm -f $tempfile" EXIT INT TERM + LC_ALL=C; export LC_ALL u=${USER-root} h=${HOSTNAME-`hostname`} t=`date` #r=`head -n 6 $1 | tail -n 1 | awk -F: ' { print $1 } '` r=`awk -F: ' /^[0-9]\.[0-9]+:/ { print $1; exit }' $1` -echo "char bootprog_name[] = \"FreeBSD/${3} ${2}\";" > vers.c -echo "char bootprog_rev[] = \"${r}\";" >> vers.c -echo "char bootprog_date[] = \"${t}\";" >> vers.c -echo "char bootprog_maker[] = \"${u}@${h}\";" >> vers.c +echo "char bootprog_name[] = \"FreeBSD/${3} ${2}\";" > $tempfile +echo "char bootprog_rev[] = \"${r}\";" >> $tempfile +echo "char bootprog_date[] = \"${t}\";" >> $tempfile +echo "char bootprog_maker[] = \"${u}@${h}\";" >> $tempfile +mv $tempfile vers.c