support/scripts/check-kernel-headers.sh: use a trap to remove the temporary file
authorCarlos Santos <unixmania@gmail.com>
Tue, 24 Sep 2019 11:37:00 +0000 (08:37 -0300)
committerThomas Petazzoni <thomas.petazzoni@bootlin.com>
Wed, 25 Sep 2019 20:07:29 +0000 (22:07 +0200)
The POSIX specification defines a 'trap <action> EXIT' mechanism that is
useful to perform clean-up actions in shell scripts. A trap has two main
advantages over hand-crafted clean-up mechanisms:

- It runs even if the process is terminated by a SIGTERM.
- It runs even if the script stops due to a pipeline failure (set -e).

Now we can make the script to stop immediately if a compilation error
occurs, instead of letting it try to run an unexisting program.

This change may appear to be overkill but Buildroot is an open source
project and each piece of code is a potential learning tool for other
developments. We must strive to provide good examples.

Signed-off-by: Carlos Santos <unixmania@gmail.com>
Acked-by: Yann E. MORIN <yann.morin@orange.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
support/scripts/check-kernel-headers.sh

index a8b94f6a026e884d5b85f1d4c2a61c162035f9ea..9d23c00feb18a7fbe41c69931bb2794fa5a02685 100755 (executable)
@@ -9,6 +9,15 @@ HDR_M="${HDR_VER%%.*}"
 HDR_V="${HDR_VER#*.}"
 HDR_m="${HDR_V%%.*}"
 
+# Exit on any error, so we don't try to run an unexisting program if the
+# compilation fails.
+set -e
+
+# Set the clean-up trap in advance to prevent a race condition in which we
+# create the file but get a SIGTERM before setting it. Notice that we don't
+# need to care about EXEC being empty, since 'rm -f ""' does nothing.
+trap 'rm -f "${EXEC}"' EXIT
+
 EXEC="$(mktemp -p "${BUILDDIR}" -t .check-headers.XXXXXX)"
 
 # We do not want to account for the patch-level, since headers are
@@ -37,6 +46,3 @@ int main(int argc __attribute__((unused)),
 _EOF_
 
 "${EXEC}"
-ret=${?}
-rm -f "${EXEC}"
-exit ${ret}