Commit 1bfae7d1 authored by Ethan Sommer's avatar Ethan Sommer Committed by Allan McRae
Browse files

libmakepkg: fix empty arguments in parseopts



Previously parseopts checked if there was an argument by checking
that the string was non-empty, resulting in empty arguments being
incorrectly considered non-existent. This change makes parseopts check
if arguments exist at all, rather than checking that they are non-empty

Signed-off-by: default avatarEthan Sommer <e5ten.arch@gmail.com>
Signed-off-by: Allan McRae's avatarAllan McRae <allan@archlinux.org>
parent 091b244d
......@@ -103,7 +103,7 @@ parseopts() {
OPTRET+=("-$opt" "${1:i+1}")
break
# if we're at the end, grab the the next positional, if it exists
elif (( i == ${#1} - 1 )) && [[ $2 ]]; then
elif (( i == ${#1} - 1 && $# > 1 )); then
OPTRET+=("-$opt" "$2")
shift
break
......@@ -144,7 +144,7 @@ parseopts() {
case $? in
0)
# parse failure
if [[ $optarg ]]; then
if [[ $1 = *=* ]]; then
printf "${0##*/}: $(gettext "option '%s' does not allow an argument")\n" "--$opt" >&2
OPTRET=(--)
return 1
......@@ -155,10 +155,10 @@ parseopts() {
;;
1)
# --longopt=optarg
if [[ $optarg ]]; then
if [[ $1 = *=* ]]; then
OPTRET+=("--$opt" "$optarg")
# --longopt optarg
elif [[ $2 ]]; then
elif (( $# > 1 )); then
OPTRET+=("--$opt" "$2" )
shift
# parse failure
......
......@@ -31,7 +31,7 @@ tap_parse() {
unset OPTRET
}
tap_plan 54
tap_plan 56
# usage: tap_parse <expected result> <token count> test-params...
# a failed tap_parse will match only the end of options marker '--'
......@@ -117,4 +117,7 @@ tap_parse '--opt= --opt=foo --opt --' 4 --opt= --opt=foo --opt
# short opt with and without optional arg, and non-option arg
tap_parse '-b=foo -A -b -- foo' 5 -bfoo -Ab foo
# all possible ways to specify empty optargs
tap_parse '--key --pkg -p --' 7 --key '' --pkg='' -p ''
tap_finish
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment