summaryrefslogtreecommitdiffstats
path: root/mkinitcpio
diff options
context:
space:
mode:
authorDave Reisner <dreisner@archlinux.org>2012-05-08 06:12:46 +0200
committerDave Reisner <dreisner@archlinux.org>2012-05-16 23:55:54 +0200
commit018ab6e95cd194fe7aef6a66928759075e9259bd (patch)
treed8a8a830758d332779fa42478f5fb7ebf3d1a772 /mkinitcpio
parent0778982e386d15e381b8f7dddd2a2bd68e78236c (diff)
downloadmkinitcpio-018ab6e95cd194fe7aef6a66928759075e9259bd.tar.gz
mkinitcpio-018ab6e95cd194fe7aef6a66928759075e9259bd.tar.xz
refactor error tracking in build hooks
Rather than catching errors solely from parse_hook via an ERR trap, implement a RETURN trap which catches all errors from the core add_* functions. In the future, this may mean that support for MODULES/FILES/BINARIES within hooks goes away, and those variables remain only in the config. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
Diffstat (limited to 'mkinitcpio')
-rwxr-xr-xmkinitcpio13
1 files changed, 7 insertions, 6 deletions
diff --git a/mkinitcpio b/mkinitcpio
index 74de0c2..ce40b22 100755
--- a/mkinitcpio
+++ b/mkinitcpio
@@ -351,10 +351,10 @@ else
msg "Starting build: %s" "$KERNELVERSION"
fi
-# set errtrace and a trap to catch errors in parse_hook
+# set functrace and trap to catch errors in add_* functions
declare -i builderrors=0
-set -E
-trap '[[ $FUNCNAME = parse_hook ]] && (( ++builderrors ))' ERR
+set -o functrace
+trap '(( $? )) && [[ $FUNCNAME = add_* ]] && (( ++builderrors ))' RETURN
# save vars from $CONFIG; they will be parsed last
for var in MODULES BINARIES FILES; do
@@ -402,7 +402,8 @@ for var in cfg_{MODULES,BINARIES,FILES}; do
done
parse_hook
-# reset the trap to catch all errors
+# switch out the error handler to catch all errors
+trap -- RETURN
trap '(( ++builderrors ))' ERR
if (( ${#ADDED_MODULES[*]} )); then
@@ -425,8 +426,8 @@ else
fi
# unset errtrace and trap
-set +E
-trap ERR
+set +o functrace
+trap -- ERR
declare -i status=0
declare -a pipesave