summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Reisner <d@falconindy.com>2011-06-12 03:13:17 +0200
committerThomas Bächler <thomas@archlinux.org>2011-06-25 12:25:45 +0200
commitbb2b9737a8343a1a3bb87a15ffb605ce8ff2af70 (patch)
tree94932c144b61193a251cd396cc5a0c2d04bd0843
parent71f3c2b390e3359c18ad3552ce3ece142937f034 (diff)
downloadmkinitcpio-bb2b9737a8343a1a3bb87a15ffb605ce8ff2af70.tar.gz
mkinitcpio-bb2b9737a8343a1a3bb87a15ffb605ce8ff2af70.tar.xz
mkinitcpio: catch errors in parse_hook
It would be better to catch errors in build as well, but this isn't entirely feasible due to the expectation of some builtins to return non-zero during normal operations (e.g., read returns 1 on EOF). Addresses FS#20661 Signed-off-by: Dave Reisner <d@falconindy.com>
-rw-r--r--functions2
-rwxr-xr-xmkinitcpio14
2 files changed, 15 insertions, 1 deletions
diff --git a/functions b/functions
index 5ed543f..580e636 100644
--- a/functions
+++ b/functions
@@ -202,7 +202,7 @@ add_module() {
add_file "$path" || return
else
error "module '$module' not found"
- return
+ return 1
fi
# explicit module depends
diff --git a/mkinitcpio b/mkinitcpio
index 3b7346b..0cc6f50 100755
--- a/mkinitcpio
+++ b/mkinitcpio
@@ -273,6 +273,11 @@ else
msg "Starting build: %s" "$KERNELVERSION"
fi
+# set errtrace and a trap to catch errors in parse_hook
+declare -i builderrors=0
+set -E
+trap '[[ $FUNCNAME = parse_hook ]] && (( ++builderrors ))' ERR
+
#parse 'global' hook, as defined in ${CONFIG}
parse_hook
@@ -306,6 +311,10 @@ for hook in ${HOOKS}; do
fi
done
+# unset errtrace and trap
+set +E
+trap ERR
+
if (( ${#ADDED_MODULES[*]} )); then
msg "Generating module dependencies"
/sbin/depmod -b "${TMPDIR}/root" "${KERNELVERSION}"
@@ -331,6 +340,11 @@ if [[ "${GENIMG}" ]]; then
errmsg="$COMPRESSION reported an error"
fi
+ if (( builderrors )); then
+ warning "errors were encountered during the build. The image may not be complete."
+ status=1
+ fi
+
if [[ $errmsg ]]; then
error "Image generation FAILED: %s\n" "$errmsg"
status=1