73 lines
1.4 KiB
Bash
73 lines
1.4 KiB
Bash
# -*- mode: sh; indent-tabs-mode: t -*-
|
|
|
|
in_list() {
|
|
printf '%s\n' "$@" | { grep -qxF "$(read -r ndl; echo "${ndl}")"; }
|
|
}
|
|
|
|
quote() {
|
|
for _arg
|
|
do
|
|
shift
|
|
if test -n "$(printf %s "${_arg}" | tr -d -c '\t\n \042-\047\050-\052\073-\077\133\\`|~' | tr -c '' '.')"
|
|
then
|
|
# needs quoting
|
|
set -- "$@" "$(printf "'%s'" "$(printf %s "${_arg}" | sed -e "s/'/'\\\\''/g")")"
|
|
else
|
|
set -- "$@" "${_arg}"
|
|
fi
|
|
done
|
|
unset _arg
|
|
|
|
# NOTE: Use printf because POSIX echo interprets escape sequences
|
|
printf '%s' "$*"
|
|
}
|
|
|
|
uci_cmd() {
|
|
# Usage: uci_cmd [UCI ARGUMENTS]...
|
|
mkdir -p "${__object:?}/files"
|
|
printf '%s\n' "$(quote "$@")" >>"${__object:?}/files/uci_batch.txt"
|
|
}
|
|
|
|
uci_validate_name() {
|
|
# like util.c uci_validate_name()
|
|
test -n "$*" && test -z "$(echo "$*" | tr -d '[:alnum:]_')"
|
|
}
|
|
|
|
uci_validate_tuple() (
|
|
tok=${1:?}
|
|
case $tok
|
|
in
|
|
(*.*.*)
|
|
# check option
|
|
option=${tok##*.}
|
|
uci_validate_name "${option}" || {
|
|
printf 'Invalid option: %s\n' "${option}" >&2
|
|
return 1
|
|
}
|
|
tok=${tok%.*}
|
|
;;
|
|
(*.*)
|
|
# no option (section definition)
|
|
;;
|
|
(*)
|
|
printf 'Invalid tuple: %s\n' "$1" >&2
|
|
return 1
|
|
;;
|
|
esac
|
|
|
|
case ${tok#*.}
|
|
in
|
|
(@*) section=$(expr "${tok#*.}" : '@\(.*\)\[-*[0-9]*\]$') ;;
|
|
(*) section=${tok#*.} ;;
|
|
esac
|
|
uci_validate_name "${section}" || {
|
|
printf 'Invalid section: %s\n' "${1#*.}" >&2
|
|
return 1
|
|
}
|
|
|
|
config=${tok%%.*}
|
|
uci_validate_name "${config}" || {
|
|
printf 'Invalid config: %s\n' "${config}" >&2
|
|
return 1
|
|
}
|
|
)
|