Use an error code to indicate partial processing.
This commit is contained in:
parent
8d638cc418
commit
b4e6a81985
1 changed files with 11 additions and 1 deletions
12
parse-ini
12
parse-ini
|
|
@ -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}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue