diff options
author | P. J. McDermott <pj@pehjota.net> | 2015-12-07 12:07:15 (EST) |
---|---|---|
committer | P. J. McDermott <pj@pehjota.net> | 2015-12-07 12:07:15 (EST) |
commit | 34a77f7822126263fed5c72aedaa65b58fee94ac (patch) | |
tree | a3404e611672f64126298e2f0f6d3398b014851e /lib/substvars.sh | |
parent | 84f3cccfb57fc8270b2ae14f0adf2c2ff24cc69b (diff) | |
parent | 41f638c961d5c7832e2b18a9f2e45a09b54dc53e (diff) |
Merge branch 'feature/use-shld'
Diffstat (limited to 'lib/substvars.sh')
-rw-r--r-- | lib/substvars.sh | 106 |
1 files changed, 0 insertions, 106 deletions
diff --git a/lib/substvars.sh b/lib/substvars.sh deleted file mode 100644 index d69c693..0000000 --- a/lib/substvars.sh +++ /dev/null @@ -1,106 +0,0 @@ -# Functions for setting and substituting variables -# -# Copyright (C) 2012, 2014 Patrick "P. J." McDermott -# -# This file is part of the ProteanOS Development Kit. -# -# The ProteanOS Development Kit is free software: you can redistribute -# it and/or modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# The ProteanOS Development Kit is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with the ProteanOS Development Kit. If not, see -# <http://www.gnu.org/licenses/>. - -[ "x${_SUBSTVARS_SM+set}" = 'xset' ] && return 0 -_SUBSTVARS_SM=1 - -substvars_max_depth=50 - -set_substvar() -{ - local name="${1}" - local value="${2}" - - # Convert variable name to lower case and validate. - name="$(printf '%s\n' "${name}" | tr 'A-Z-' 'a-z_')" - case "${name:- }" in - *[!a-z0-9_]*) - warn "$(get_msg 'substvar_invalid')" "${name}" - return 1 - ;; - esac - - # Trim leading and trailing newline characters from value. - value="$(printf '%s\n' "${value}" | sed -n ' - H; # Store each input line in the hold space. - ${ # At the last line of input: - g; # Restore the hold space into the pattern space. - s/^[\n]*//; # Remove leading newline characters. - s/[\n]*$//; # Remove trailing newline characters. - p; # Print the results. - }; - ')" - - # Escape single quotes in value. - value="$(printf '%s\n' "${value}" | sed "s/'/'\\\\''/g")" - - eval "substvar_${name}='${value}'" - - return 0 -} - -substvars() -{ - local string="${1}" - local depth= - local lhs= - local name= - local rhs= - local old_rhs= - local value= - - # Logic inspired by that of dpkg's Dpkg::Substvars::substvars() - # subroutine. - - depth=0 - - while :; do - lhs="${string%%\$\{*}" - if [ ${#lhs} -eq ${#string} ]; then - # No "${" was found. - break - fi - string="${string#*\$\{}" - name="${string%%\}*}" - rhs="${string#*\}}" - - if [ ${#rhs} -lt ${#old_rhs} ]; then - # Reset the nesting counter if we've advanced the right - # side of the matched space. - depth=0 - fi - if [ ${depth} -ge ${substvars_max_depth} ]; then - # Warn of possible recursion. - warn "$(get_msg 'substvar_deep_nesting')" - return 1 - fi - old_rhs="${rhs}" - - # Perform the substitution. - name="$(printf '%s\n' "${name}" | tr 'A-Z-' 'a-z_')" - value="$(eval "printf '%s\n' \"\${substvar_${name}}\"")" - string="${lhs}${value}${rhs}" - depth=$(($depth + 1)) - done - - printf '%s\n' "${string}" - - return 0 -} |