Imported Upstream version 1.4.16_pre1
This commit is contained in:
parent
047baae1ca
commit
212b4b8677
69 changed files with 10803 additions and 2698 deletions
|
@ -21,3 +21,88 @@ support() {
|
|||
$ECHO "@SUPPORT@" | sed -e 's/\n/ /g'
|
||||
}
|
||||
|
||||
#
|
||||
# check_range takes a value and a range string, returning successfully if an
|
||||
# alert should be raised based on the range.
|
||||
#
|
||||
check_range() {
|
||||
local v range yes no err decimal start end cmp match
|
||||
v="$1"
|
||||
range="$2"
|
||||
|
||||
# whether to raise an alert or not
|
||||
yes=0
|
||||
no=1
|
||||
err=2
|
||||
|
||||
# regex to match a decimal number
|
||||
decimal="-?([0-9]+\.?[0-9]*|[0-9]*\.[0-9]+)"
|
||||
|
||||
# compare numbers (including decimals), returning true/false
|
||||
cmp() { awk "BEGIN{ if ($1) exit(0); exit(1)}"; }
|
||||
|
||||
# returns successfully if the string in the first argument matches the
|
||||
# regex in the second
|
||||
match() { echo "$1" | grep -E -q -- "$2"; }
|
||||
|
||||
# make sure value is valid
|
||||
if ! match "$v" "^$decimal$"; then
|
||||
echo "${0##*/}: check_range: invalid value" >&2
|
||||
unset -f cmp match
|
||||
return "$err"
|
||||
fi
|
||||
|
||||
# make sure range is valid
|
||||
if ! match "$range" "^@?(~|$decimal)(:($decimal)?)?$"; then
|
||||
echo "${0##*/}: check_range: invalid range" >&2
|
||||
unset -f cmp match
|
||||
return "$err"
|
||||
fi
|
||||
|
||||
# check for leading @ char, which negates the range
|
||||
if match $range '^@'; then
|
||||
range=${range#@}
|
||||
yes=1
|
||||
no=0
|
||||
fi
|
||||
|
||||
# parse the range string
|
||||
if ! match "$range" ':'; then
|
||||
start=0
|
||||
end="$range"
|
||||
else
|
||||
start="${range%%:*}"
|
||||
end="${range#*:}"
|
||||
fi
|
||||
|
||||
# do the comparison, taking positive ("") and negative infinity ("~")
|
||||
# into account
|
||||
if [ "$start" != "~" ] && [ "$end" != "" ]; then
|
||||
if cmp "$start <= $v" && cmp "$v <= $end"; then
|
||||
unset -f cmp match
|
||||
return "$no"
|
||||
else
|
||||
unset -f cmp match
|
||||
return "$yes"
|
||||
fi
|
||||
elif [ "$start" != "~" ] && [ "$end" = "" ]; then
|
||||
if cmp "$start <= $v"; then
|
||||
unset -f cmp match
|
||||
return "$no"
|
||||
else
|
||||
unset -f cmp match
|
||||
return "$yes"
|
||||
fi
|
||||
elif [ "$start" = "~" ] && [ "$end" != "" ]; then
|
||||
if cmp "$v <= $end"; then
|
||||
unset -f cmp match
|
||||
return "$no"
|
||||
else
|
||||
unset -f cmp match
|
||||
return "$yes"
|
||||
fi
|
||||
else
|
||||
unset -f cmp match
|
||||
return "$no"
|
||||
fi
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue