From 0f548f1367bfdba2e270242bb0fccad1da5f8adf Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Tue, 29 Nov 2011 23:26:48 +0100 Subject: [PATCH] gsu subcommand: Fix off-by-one bug in gsu_cword_is_option_parameter(). We define $n as the number of characters in the getopt string *minus one*, so we must loop from 0 to $n, inclusively. This patch also adds documentation of this public function. --- misc/gsu/subcommand | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/misc/gsu/subcommand b/misc/gsu/subcommand index 7ba4850..84c0174 100644 --- a/misc/gsu/subcommand +++ b/misc/gsu/subcommand @@ -434,6 +434,15 @@ EOF ret=$GSU_SUCCESS } +# Find out if the current word is a parameter for an option. +# +# $1: usual getopts option string. +# $2: The current word number. +# $3..: All words of the current command line. +# +# return: If yes, $result contains the letter of the option for which the +# current word is a parameter. Otherwise, $result is empty. +# gsu_cword_is_option_parameter() { local opts="$1" cword="$2" prev i n @@ -449,7 +458,7 @@ gsu_cword_is_option_parameter() [[ ! "$prev" == -* ]] && return n=$((${#opts} - 1)) - for ((i=0; i < $n; i++)); do + for ((i=0; i <= $n; i++)); do opt="${opts:$i:1}" [[ "${opts:$(($i + 1)):1}" != ":" ]] && continue let i++ -- 2.30.2