makepkg: Don't use parameterless return

It's especially dangerous in trap handlers since the return value of the
function becomes the return value of the last command before the trap,
not the last command in the current function. This applies to any
function executed in a trap handler, nested functions included.

In one case, install_packages failed (via return 14), which was inside a
conditional that then ran exit 14, which triggered the EXIT handler,
which called clean_up, which called remove_deps, which had !RMDEPS and
thus returned. The return value of remove_deps became the return value
of install_packages, triggering the ERR handler, which (due to another
problem) was still the user function handler, which then printed a
misleading error message and overrode the exit code with 4.

Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Jan Alexander Steffens (heftig) 2018-05-31 17:46:51 +02:00 committed by Allan McRae
parent ab1e92860b
commit 05a3641c76

View file

@ -133,7 +133,7 @@ clean_up() {
if (( INFAKEROOT )); then if (( INFAKEROOT )); then
# Don't clean up when leaving fakeroot, we're not done yet. # Don't clean up when leaving fakeroot, we're not done yet.
return return 0
fi fi
if (( (EXIT_CODE == E_OK || EXIT_CODE == E_INSTALL_FAILED) && CLEANUP )); then if (( (EXIT_CODE == E_OK || EXIT_CODE == E_INSTALL_FAILED) && CLEANUP )); then
@ -313,7 +313,7 @@ resolve_deps() {
} }
remove_deps() { remove_deps() {
(( ! RMDEPS )) && return (( ! RMDEPS )) && return 0
# check for packages removed during dependency install (e.g. due to conflicts) # check for packages removed during dependency install (e.g. due to conflicts)
# removing all installed packages is risky in this case # removing all installed packages is risky in this case
@ -519,7 +519,7 @@ find_libdepends() {
if (( sodepends == 0 )); then if (( sodepends == 0 )); then
(( ${#depends[@]} )) && printf '%s\n' "${depends[@]}" (( ${#depends[@]} )) && printf '%s\n' "${depends[@]}"
return; return 0
fi fi
local libdeps filename soarch sofile soname soversion; local libdeps filename soarch sofile soname soversion;
@ -721,7 +721,7 @@ list_package_files() {
} }
create_package() { create_package() {
(( NOARCHIVE )) && return (( NOARCHIVE )) && return 0
if [[ ! -d $pkgdir ]]; then if [[ ! -d $pkgdir ]]; then
error "$(gettext "Missing %s directory.")" "\$pkgdir/" error "$(gettext "Missing %s directory.")" "\$pkgdir/"
@ -784,14 +784,14 @@ create_package() {
create_debug_package() { create_debug_package() {
# check if a debug package was requested # check if a debug package was requested
if ! check_option "debug" "y" || ! check_option "strip" "y"; then if ! check_option "debug" "y" || ! check_option "strip" "y"; then
return return 0
fi fi
pkgdir="$pkgdirbase/$pkgbase-@DEBUGSUFFIX@" pkgdir="$pkgdirbase/$pkgbase-@DEBUGSUFFIX@"
# check if we have any debug symbols to package # check if we have any debug symbols to package
if dir_is_empty "$pkgdir/usr/lib/debug"; then if dir_is_empty "$pkgdir/usr/lib/debug"; then
return return 0
fi fi
unset groups depends optdepends provides conflicts replaces backup install changelog unset groups depends optdepends provides conflicts replaces backup install changelog
@ -875,7 +875,7 @@ create_srcpackage() {
} }
install_package() { install_package() {
(( ! INSTALL )) && return (( ! INSTALL )) && return 0
if (( ! SPLITPKG )); then if (( ! SPLITPKG )); then
msg "$(gettext "Installing package %s with %s...")" "$pkgname" "$PACMAN -U" msg "$(gettext "Installing package %s with %s...")" "$pkgname" "$PACMAN -U"