summaryrefslogtreecommitdiff
path: root/tests/init.sh
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff.email>2022-10-24 22:25:29 +0200
committerJörg Frings-Fürst <debian@jff.email>2022-10-24 22:25:29 +0200
commit26112352a774737e1ce5580c93654a26c1e82b39 (patch)
treed64e2f5b6e7aa92fa9a8ffb8ae5df75310532714 /tests/init.sh
parentbe8efac78d067c138ad8dda03df4336e73f94887 (diff)
New upstream version 1.1upstream/1.1upstream
Diffstat (limited to 'tests/init.sh')
-rw-r--r--tests/init.sh43
1 files changed, 24 insertions, 19 deletions
diff --git a/tests/init.sh b/tests/init.sh
index 933fdd4..d5d37c9 100644
--- a/tests/init.sh
+++ b/tests/init.sh
@@ -271,12 +271,10 @@ test -n "$EXEEXT" && test -n "$BASH_VERSION" && shopt -s expand_aliases
#
# First, try to use the mktemp program.
# Failing that, we'll roll our own mktemp-like function:
-# - try to get random bytes from /dev/urandom
+# - try to get random bytes from /dev/urandom, mapping them to file-name bytes
# - failing that, generate output from a combination of quickly-varying
-# sources and gzip. Ignore non-varying gzip header, and extract
-# "random" bits from there.
-# - given those bits, map to file-name bytes using tr, and try to create
-# the desired directory.
+# sources and awk.
+# - try to create the desired directory.
# - make only $MAX_TRIES_ attempts
# Helper function. Print $N pseudo-random bytes from a-zA-Z0-9.
@@ -296,20 +294,27 @@ rand_bytes_ ()
return
fi
- n_plus_50_=`expr $n_ + 50`
- cmds_='date; date +%N; free; who -a; w; ps auxww; ps -ef'
- data_=` (eval "$cmds_") 2>&1 | gzip `
-
- # Ensure that $data_ has length at least 50+$n_
- while :; do
- len_=`echo "$data_"|wc -c`
- test $n_plus_50_ -le $len_ && break;
- data_=` (echo "$data_"; eval "$cmds_") 2>&1 | gzip `
- done
-
- echo "$data_" \
- | dd bs=1 skip=50 count=$n_ 2>/dev/null \
- | LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_
+ # Fall back on quickly-varying sources + awk.
+ # Limit awk program to 7th Edition Unix so that it works even on Solaris 10.
+
+ (date; date +%N; free; who -a; w; ps auxww; ps -ef) 2>&1 | awk '
+ BEGIN {
+ n = '"$n_"'
+ for (i = 0; i < 256; i++)
+ ordinal[sprintf ("%c", i)] = i
+ }
+ {
+ for (i = 1; i <= length; i++)
+ a[ai++ % n] += ordinal[substr ($0, i, 1)]
+ }
+ END {
+ chars = "'"$chars_"'"
+ charslen = length (chars)
+ for (i = 0; i < n; i++)
+ printf "%s", substr (chars, a[i] % charslen + 1, 1)
+ printf "\n"
+ }
+ '
}
mktempd_ ()