Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/freebsd/poudriere.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBryan Drewery <bryan@shatow.net>2022-09-14 02:21:01 +0300
committerBryan Drewery <bryan@shatow.net>2022-11-05 18:47:57 +0300
commit6563105c7d3e7d128bc749e22a2d3b3aca75abf8 (patch)
treea01efcdb64d9ecf35532fafd66f880395639c66d /src
parent9970a15c48c5d975465aeed9cbe1981f2ecaf45b (diff)
Add non-forking decode_args
Diffstat (limited to 'src')
-rw-r--r--src/share/poudriere/include/util.sh34
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() {