diff options
author | 2024-06-02 04:36:37 +0100 | |
---|---|---|
committer | 2024-06-11 07:11:59 +0100 | |
commit | 3f2519288f1074a7ef5e8378f4bdf37809b262e5 (patch) | |
tree | fc74f8694f7f7714e5aa8af8642f4464090386ad | |
parent | Add an AUTHORS file (diff) | |
download | gentoo-functions-3f2519288f1074a7ef5e8378f4bdf37809b262e5.tar.gz gentoo-functions-3f2519288f1074a7ef5e8378f4bdf37809b262e5.tar.bz2 gentoo-functions-3f2519288f1074a7ef5e8378f4bdf37809b262e5.zip |
Relax parameter validation for various functions
Following some deliberation over the matter, I have concluded that
calling die() for the handling of invalid parameters ought not to be
considered as a matter of course. As such, this commit retains the
existing diagnostics for the functions listed below, while modifying
them so as to no longer attempt to exit the shell.
- eend
- eqatag
- esyslog
- ewend
- is_older than
- veend
- vewend
- yesno
Signed-off-by: Kerin Millar <kfm@plushkava.net>
-rw-r--r-- | functions.sh | 69 | ||||
-rwxr-xr-x | test-functions | 13 |
2 files changed, 42 insertions, 40 deletions
diff --git a/functions.sh b/functions.sh index 48b4c5a..ec1f339 100644 --- a/functions.sh +++ b/functions.sh @@ -63,7 +63,7 @@ if ! command -v die >/dev/null; then *) genfun_status=$? esac - printf '%s: %s\n' "${0##*/}" "$*" >&2 + warn "$@" exit "${genfun_status}" } fi @@ -209,7 +209,8 @@ eqatag() shift fi if [ "$#" -eq 0 ]; then - die "eqatag: no tag specified" + warn "eqatag: no tag specified" + return 1 fi positional=0 tag=$1 @@ -222,7 +223,8 @@ eqatag() case ${arg} in [!=/]*=?*) if [ "${positional}" -eq 1 ]; then - _throw_invalid_args eqatag "${arg}" + _warn_for_args eqatag "${arg}" + return 1 fi set -- "$@" --arg "${arg%%=*}" "${arg#*=}" ;; @@ -234,7 +236,8 @@ eqatag() set -- "$@" "${arg}" ;; *) - _throw_invalid_args eqatag "${arg}" + _warn_for_args eqatag "${arg}" + return 1 esac done json=$( @@ -269,7 +272,8 @@ esyslog() local pri tag msg if [ "$#" -lt 2 ]; then - die "esyslog: too few arguments (got $#, expected at least 2)" + warn "esyslog: too few arguments (got $#, expected at least 2)" + return 1 elif yesno "${EINFO_LOG}" && hash logger 2>/dev/null; then pri=$1 tag=$2 @@ -380,8 +384,9 @@ is_older_than() { local ref has_gfind - if [ "$#" -lt 2 ]; then - die "is_older_than: too few arguments (got $#, expected at least 2)" + if [ "$#" -eq 0 ]; then + warn "is_older_than: too few arguments (got $#, expected at least 1)" + return 1 elif [ -e "$1" ]; then ref=$1 else @@ -431,7 +436,8 @@ veend() if yesno "${EINFO_VERBOSE}"; then GENFUN_CALLER=veend eend "$@" elif [ "$#" -gt 0 ] && { ! is_int "$1" || [ "$1" -lt 0 ]; }; then - _throw_invalid_args veend "$1" + _warn_for_args veend "$1" + false else return "$1" fi @@ -442,7 +448,8 @@ vewend() if yesno "${EINFO_VERBOSE}"; then GENFUN_CALLER=vewend ewend "$@" elif [ "$#" -gt 0 ] && { ! is_int "$1" || [ "$1" -lt 0 ]; }; then - _throw_invalid_args vewend "$1" + _warn_for_args vewend "$1" + false else return "$1" fi @@ -459,7 +466,8 @@ yesno() local arg if [ "$#" -eq 0 ]; then - die "yesno: too few arguments (got $#, expected 1)" + warn "yesno: too few arguments (got $#, expected 1)" + return 1 fi arg=$1 for _ in 1 2; do @@ -471,14 +479,15 @@ yesno() return 0 esac if [ "$_" -ne 1 ] || ! is_identifier "$1"; then - ! break + break else # The value appears to be a legal variable name. Treat # it as a name reference and try again, once only. eval "arg=\$$1" fi - done || _throw_invalid_args yesno "$1" - return 1 + done + _warn_for_args yesno "$@" + false } # @@ -494,7 +503,9 @@ _eend() if [ "$#" -eq 0 ]; then retval=0 elif ! is_int "$1" || [ "$1" -lt 0 ]; then - _throw_invalid_args "${GENFUN_CALLER}" "$1" + _warn_for_args "${GENFUN_CALLER}" "$1" + retval=1 + msg= else retval=$1 shift @@ -663,21 +674,6 @@ _print_args() } # -# Prints a diganostic message concerning invalid function arguments then exits. -# The first argument shall be taken as a function identifier. The remaining -# arguments shall be safely rendered as a part of the diagnostic. -# -_throw_invalid_args() -{ - local ident plural - - ident=$1 - shift - [ "$#" -gt 1 ] && plural=s || plural= - die "${ident}: invalid argument${plural}: $(_print_args "$@")" -} - -# # Determines whether the terminal on STDIN is able to report its dimensions. # Upon success, the number of columns shall be stored in genfun_cols. # @@ -718,6 +714,21 @@ _update_tty_level() fi } +# +# Prints a diganostic message concerning invalid function arguments. The first +# argument shall be taken as a function identifier. The remaining arguments +# shall be safely rendered as a part of the diagnostic. +# +_warn_for_args() +{ + local ident plural + + ident=$1 + shift + [ "$#" -gt 1 ] && plural=s || plural= + warn "${ident}: invalid argument${plural}: $(_print_args "$@")" +} + # All function declarations end here! Initialisation code only from hereon. # shellcheck disable=2034 RC_GOT_FUNCTIONS=yes diff --git a/test-functions b/test-functions index d65a3a2..4a6e7dd 100755 --- a/test-functions +++ b/test-functions @@ -196,11 +196,7 @@ test_is_older_than() { callback() { shift test_description="is_older_than $(_print_args "$@")" - if [ "$#" -lt 2 ]; then - ( is_older_than "$@" ) - else - is_older_than "$@" - fi + is_older_than "$@" } iterate_tests 4 "$@" @@ -392,16 +388,11 @@ test_yesno() { # shellcheck disable=2034 truthful_nameref=yes - row=0 callback() { shift test_description="yesno $(_print_args "$@")" - if [ "$(( row += 1 ))" -ge 22 ]; then - ( yesno "$@" ) - else - yesno "$@" - fi + yesno "$@" } iterate_tests 3 "$@" |