summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Meyering <meyering@fb.com>2022-11-06 11:17:56 -0800
committerJim Meyering <meyering@fb.com>2022-11-06 11:38:14 -0800
commit3fe543665ce39a2d9582fd8654f4bdd83e18133e (patch)
treeabdce546c5517c36630eff68dbf9ce293743c4a6
parent8efd09941eb95947f10773094764dbfd2136feda (diff)
downloadsed-3fe543665ce39a2d9582fd8654f4bdd83e18133e.tar.gz
build: update gnulib to latest, and testsuite/init.sh
m---------gnulib0
-rw-r--r--testsuite/init.sh43
2 files changed, 24 insertions, 19 deletions
diff --git a/gnulib b/gnulib
-Subproject 0814a293a4e40e49a8a0d2d5d94f04cc170a7e2
+Subproject 05247463920adc8de0054ba7ab82f7034703cbf
diff --git a/testsuite/init.sh b/testsuite/init.sh
index 933fdd4..d5d37c9 100644
--- a/testsuite/init.sh
+++ b/testsuite/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_ ()