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
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
parent9970a15c48c5d975465aeed9cbe1981f2ecaf45b (diff)
Add non-forking decode_args
-rw-r--r--src/share/poudriere/include/util.sh34
-rw-r--r--test/encode_args.sh3
2 files changed, 25 insertions, 12 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() {
diff --git a/test/encode_args.sh b/test/encode_args.sh
index df177d11..67e27883 100644
--- a/test/encode_args.sh
+++ b/test/encode_args.sh
@@ -121,7 +121,8 @@ assert "" "$2" "decode 3 trailing arguments x argument 2"
assert "" "$3" "decode 3 trailing arguments x argument 3"
assert "x" "$4" "decode 3 trailing arguments x argument 4"
set -- bad bad bad bad bad
-eval "$(decode_args data)"
+_decode_args _decode_args data
+eval "${_decode_args}"
assert 4 $# "decode 3 trailing arguments x argcnt"
assert "1" "$1" "decode 3 trailing arguments x argument 1"
assert "" "$2" "decode 3 trailing arguments x argument 2"