Use an error code to indicate partial processing.

This commit is contained in:
Darren 'Tadgy' Austin 2019-08-10 02:57:46 +01:00
commit b4e6a81985

View file

@ -265,7 +265,7 @@ parse_ini() {
local VARIABLE_DELIM="_" # Delimiter between prefix and section name, unless VARIABLE_PREFIX is empty. local VARIABLE_DELIM="_" # Delimiter between prefix and section name, unless VARIABLE_PREFIX is empty.
# Variables. # Variables.
local DELIM IGNORE_SECTION=0 INIFD KEY LINE LINENUMBER=0 PREFIX SECTIONS_SEEN=() SHOWN_SEC_HEAD=0 TEMP VALUE local DELIM ERROR_CODE IGNORE_SECTION=0 INIFD KEY LINE LINENUMBER=0 PREFIX SECTIONS_SEEN=() SHOWN_SEC_HEAD=0 TEMP VALUE
declare DELIM_SET=0 INIFILE declare DELIM_SET=0 INIFILE
# Parse options. # Parse options.
@ -353,14 +353,17 @@ parse_ini() {
# Check the format of the section definition. # Check the format of the section definition.
if [[ "${LINE: -1:1}" != "]" ]]; then if [[ "${LINE: -1:1}" != "]" ]]; then
echo "${0##*/}: line $LINENUMBER: unmatched [ in section definition - skipping section" >&2 echo "${0##*/}: line $LINENUMBER: unmatched [ in section definition - skipping section" >&2
ERROR_CODE=2
IGNORE_SECTION=1 IGNORE_SECTION=1
continue continue
elif [[ "${LINE:1:-1}" =~ [^$ACCEPTABLE_CHARS\[\]]* ]]; then elif [[ "${LINE:1:-1}" =~ [^$ACCEPTABLE_CHARS\[\]]* ]]; then
echo "${0##*/}: line $LINENUMBER: invalid characters in section definition - skipping section" >&2 echo "${0##*/}: line $LINENUMBER: invalid characters in section definition - skipping section" >&2
ERROR_CODE=2
IGNORE_SECTION=1 IGNORE_SECTION=1
continue continue
elif [[ -z "${LINE:1:-1}" ]] || [[ "${LINE:1:-1}" =~ ^[[:blank:]]+$ ]]; then elif [[ -z "${LINE:1:-1}" ]] || [[ "${LINE:1:-1}" =~ ^[[:blank:]]+$ ]]; then
echo "${0##*/}: line $LINENUMBER: empty section definition - skipping section" >&2 echo "${0##*/}: line $LINENUMBER: empty section definition - skipping section" >&2
ERROR_CODE=2
IGNORE_SECTION=1 IGNORE_SECTION=1
continue continue
else else
@ -390,6 +393,7 @@ parse_ini() {
# If the prefix and delim are both empty, the section name cannot begin with a number. # If the prefix and delim are both empty, the section name cannot begin with a number.
if [[ -z "$PREFIX" ]] && [[ -z "$DELIM" ]] && [[ "${LINE:0:1}" =~ [[:digit:]] ]]; then if [[ -z "$PREFIX" ]] && [[ -z "$DELIM" ]] && [[ "${LINE:0:1}" =~ [[:digit:]] ]]; then
echo "${0##*/}: line $LINENUMBER: section name cannot begin with a number when prefix (-p) and delim (-d) are both empty - skipping section" >&2 echo "${0##*/}: line $LINENUMBER: section name cannot begin with a number when prefix (-p) and delim (-d) are both empty - skipping section" >&2
ERROR_CODE=2
IGNORE_SECTION=1 IGNORE_SECTION=1
continue 2 continue 2
else else
@ -403,6 +407,7 @@ parse_ini() {
if [[ "$CURRENT_SECTION" == "$TEMP" ]]; then if [[ "$CURRENT_SECTION" == "$TEMP" ]]; then
# It's a section we've seen before - don't process it. # It's a section we've seen before - don't process it.
echo "${0##*/}: line $LINENUMBER: repeated section name - skipping section" >&2 echo "${0##*/}: line $LINENUMBER: repeated section name - skipping section" >&2
ERROR_CODE=2
IGNORE_SECTION=1 IGNORE_SECTION=1
continue 2 continue 2
fi fi
@ -424,6 +429,7 @@ parse_ini() {
LINE="${LINE:1:-1}" LINE="${LINE:1:-1}"
else else
echo "${0##*/}: line $LINENUMBER: unmatched quotes - skipping property" >&2 echo "${0##*/}: line $LINENUMBER: unmatched quotes - skipping property" >&2
ERROR_CODE=2
continue continue
fi fi
fi fi
@ -454,6 +460,7 @@ parse_ini() {
((CHECK_ONLY == 0)) && printf "%s%s%s['%s']='%s'\\n" "$PREFIX" "${PREFIX:+$DELIM}" "$CURRENT_SECTION" "$LINE" "$TEMP" ((CHECK_ONLY == 0)) && printf "%s%s%s['%s']='%s'\\n" "$PREFIX" "${PREFIX:+$DELIM}" "$CURRENT_SECTION" "$LINE" "$TEMP"
else else
echo "${0##*/}: line $LINENUMBER: key without a value - skipping property" >&2 echo "${0##*/}: line $LINENUMBER: key without a value - skipping property" >&2
ERROR_CODE=2
continue continue
fi fi
elif ((IGNORE_SECTION == 0)); then # Process the property definition as a key/value pair. elif ((IGNORE_SECTION == 0)); then # Process the property definition as a key/value pair.
@ -480,6 +487,7 @@ parse_ini() {
VALUE="${VALUE:1:-1}" VALUE="${VALUE:1:-1}"
else else
echo "${0##*/}: line $LINENUMBER: unmatched quotes - skipping property" >&2 echo "${0##*/}: line $LINENUMBER: unmatched quotes - skipping property" >&2
ERROR_CODE=2
continue continue
fi fi
fi fi
@ -519,6 +527,8 @@ parse_ini() {
# Clean up the environment. # Clean up the environment.
unset DELIM_SET INIFILE unset DELIM_SET INIFILE
return "${ERROR_CODE:-0}"
} }