From ad6133ac9cea3d873291675a030c1361cd5cf6b9 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 24 Oct 2010 11:59:46 +0200 Subject: [PATCH] gsu_getopts: Abort on programming errors and add documentation. --- funcs/gsu | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/funcs/gsu b/funcs/gsu index abe64ce..673605e 100644 --- a/funcs/gsu +++ b/funcs/gsu @@ -398,24 +398,49 @@ _gsu_check_options() } export -f _gsu_check_options +# Wrapper for bash's getopts. +# +# Aborts on programming errors such as missing or invalid option string. On +# success $result contains shell code that can be eval'ed. For each defined +# option x, the local variable o_x will be created when calling eval "$result". +# o_x contains true/false for options without an argument or the emtpy string/the +# given argument, depending on whether this option was contained in the "$@" +# array. +# +# Example: +# gsu_getopts abc:x:y +# eval "$result" +# [[ $ret -lt 0 ]] && return +# +# [[ "$o_a" = "true ]] && echo "The -a flag was given" +# [[ -n "$o_c" ]] && echo "The -c option was given with arg $o_c" gsu_getopts() { local i c tab=' ' cr=' ' gsu_check_arg_count $# 1 1 - [[ $ret -lt 0 ]] && return + if [[ $ret -lt 0 ]]; then + gsu_err_msg + exit 1 + fi ret=-$E_GSU_GETOPTS result="invalid optstring $1" - [[ -z "$1" || "$1" =~ "::" ]] && return + if [[ -z "$1" || "$1" =~ "::" ]]; then + gsu_err_msg + exit 1 + fi + for ((i=0; i < ${#1}; i++)); do c=${1:$i:1} case "$c" in [a-zA-Z:]);; *) + ret=-$E_GSU_GETOPTS result="invalid character $c in optstring" - return + gsu_err_msg + exit 1 esac done result="local opt" -- 2.39.5