summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorngie <ngie@FreeBSD.org>2015-11-15 20:14:54 +0000
committerngie <ngie@FreeBSD.org>2015-11-15 20:14:54 +0000
commit9f04bb19d0b5ef7a7fd40e485996c863efc629fc (patch)
tree37ce9a95b0fe75f565cc1d2b10796d5f453f1011
parent3491a2df41fa2dd52dbf6a50486267817ae4fadf (diff)
downloadFreeBSD-src-9f04bb19d0b5ef7a7fd40e485996c863efc629fc.zip
FreeBSD-src-9f04bb19d0b5ef7a7fd40e485996c863efc629fc.tar.gz
MFC r289896:
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. Sponsored by: EMC / Isilon Storage Division
-rwxr-xr-xsys/boot/common/newvers.sh12
1 files changed, 8 insertions, 4 deletions
diff --git a/sys/boot/common/newvers.sh b/sys/boot/common/newvers.sh
index fd7b0b1..ee2ac99 100755
--- a/sys/boot/common/newvers.sh
+++ b/sys/boot/common/newvers.sh
@@ -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
OpenPOWER on IntegriCloud