diff options
author | Bryan Drewery <bryan@shatow.net> | 2022-09-14 02:21:01 +0300 |
---|---|---|
committer | Bryan Drewery <bryan@shatow.net> | 2022-11-05 18:47:57 +0300 |
commit | 6563105c7d3e7d128bc749e22a2d3b3aca75abf8 (patch) | |
tree | a01efcdb64d9ecf35532fafd66f880395639c66d /src | |
parent | 9970a15c48c5d975465aeed9cbe1981f2ecaf45b (diff) |
Add non-forking decode_args
Diffstat (limited to 'src')
-rw-r--r-- | src/share/poudriere/include/util.sh | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/src/share/poudriere/include/util.sh b/src/share/poudriere/include/util.sh index 8e329098..ee1919d0 100644 --- a/src/share/poudriere/include/util.sh +++ b/src/share/poudriere/include/util.sh @@ -65,20 +65,32 @@ decode_args() { local -; set +x [ $# -eq 1 ] || eargs decode_args encoded_args_var local encoded_args_var="$1" + local _decode_args - # oldIFS="${IFS}"; IFS="${ENCODE_SEP}"; set -- ${data}; IFS="${oldIFS}"; unset oldIFS - echo "\ - local IFS 2>/dev/null || :; \ - case \$- in *f*) set_f=1 ;; *) set_f=0 ;; esac; \ - [ \"\${set_f}\" -eq 0 ] && set -f; \ - IFS=\"\${ENCODE_SEP}\"; \ - set -- \${${encoded_args_var}}; \ - unset IFS; \ - [ \"\${set_f}\" -eq 0 ] && set +f; \ - unset set_f; \ - " + _decode_args _decode_args "${encoded_args_var}" + echo "${_decode_args}" } +# Decode data from encode_args without a fork +# Usage: _decode_args evalstr data_var_name; eval "${evalstr}"; unset evalstr +_decode_args() { + local -; set +x + [ $# -eq 2 ] || eargs decode_args var_return_eval encoded_args_var + local var_return_eval="$1" + local encoded_args_var="$2" + + # local -; set -f; IFS="${ENCODE_SEP}"; set -- ${data}; unset IFS + setvar "${var_return_eval}" " + local IFS 2>/dev/null || :; + case \$- in *f*) set_f=1 ;; *) set_f=0 ;; esac; + [ \"\${set_f}\" -eq 0 ] && set -f; + IFS=\"\${ENCODE_SEP}\"; + set -- \${${encoded_args_var}}; + unset IFS; + [ \"\${set_f}\" -eq 0 ] && set +f; + unset set_f; + " +} # Decode data from encode_args decode_args_vars() { |