diff options
author | Dave Reisner <d@falconindy.com> | 2011-06-12 03:13:17 +0200 |
---|---|---|
committer | Thomas Bächler <thomas@archlinux.org> | 2011-06-25 12:25:45 +0200 |
commit | bb2b9737a8343a1a3bb87a15ffb605ce8ff2af70 (patch) | |
tree | 94932c144b61193a251cd396cc5a0c2d04bd0843 | |
parent | 71f3c2b390e3359c18ad3552ce3ece142937f034 (diff) | |
download | mkinitcpio-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-- | functions | 2 | ||||
-rwxr-xr-x | mkinitcpio | 14 |
2 files changed, 15 insertions, 1 deletions
@@ -202,7 +202,7 @@ add_module() { add_file "$path" || return else error "module '$module' not found" - return + return 1 fi # explicit module depends @@ -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 |