Don't pass shell loops' stdin to programs run on glibc's host
Joseph S. Myers
joseph@codesourcery.com
Sat Oct 20 00:14:00 GMT 2012
One issue that arises in cross testing, when using a wrapper that runs
tests over ssh, is that ssh reads input without waiting for the remote
process to need input, which interferes with shell "while" loops
reading from stdin on the build system side.
Rather than requiring wrappers to read only the exact bytes required
by the process run on the remote side (if that is even possible), it
seems better for robustness to redirect input from /dev/null for
programs run on glibc's host within such loops (if input is not
already otherwise redirected or received from a pipe rather than from
the input to the "while" loop), so the tests do not depend on exactly
how cross-testing wrappers handle stdin. This patch does that.
Tested x86_64.
2012-10-19 Jim Blandy <jimb@codesourcery.com>
Joseph Myers <joseph@codesourcery.com>
* iconvdata/run-iconv-test.sh: Redirect iconv stdin in loops from
/dev/null.
* iconvdata/tst-tables.sh: Redirect tst-table.sh stdin in loop
from /dev/null
* localedata/tst-fmon.sh: Redirect test program stdin in loop from
/dev/null.
* localedata/tst-numeric.sh: Likewise.
* localedata/tst-rpmatch.sh: Likewise.
* posix/tst-getconf.sh: Redirect getconf stdin in loop from
/dev/null.
diff --git a/iconvdata/run-iconv-test.sh b/iconvdata/run-iconv-test.sh
index 34c400d..cb9f5df 100755
--- a/iconvdata/run-iconv-test.sh
+++ b/iconvdata/run-iconv-test.sh
@@ -61,7 +61,7 @@ while read from to subset targets; do
for t in $targets; do
if test -f testdata/$from; then
echo $ac_n " test data: $from -> $t $ac_c"
- $PROG -f $from -t $t testdata/$from > $temp1 ||
+ $PROG -f $from -t $t testdata/$from < /dev/null > $temp1 ||
{ if test $? -gt 128; then exit 1; fi
echo "FAILED"; failed=1; continue; }
echo $ac_n "OK$ac_c"
@@ -71,7 +71,7 @@ while read from to subset targets; do
echo $ac_n "/OK$ac_c"
fi
echo $ac_n " -> $from $ac_c"
- $PROG -f $t -t $to -o $temp2 $temp1 ||
+ $PROG -f $t -t $to -o $temp2 $temp1 < /dev/null ||
{ if test $? -gt 128; then exit 1; fi
echo "FAILED"; failed=1; continue; }
echo $ac_n "OK$ac_c"
@@ -87,7 +87,7 @@ while read from to subset targets; do
# set. Otherwise we convert to all the TARGETS.
if test $subset = Y; then
echo $ac_n " suntzu: $from -> $t -> $to $ac_c"
- $PROG -f $from -t $t testdata/suntzus |
+ $PROG -f $from -t $t testdata/suntzus < /dev/null |
$PROG -f $t -t $to > $temp1 ||
{ if test $? -gt 128; then exit 1; fi
echo "FAILED"; failed=1; continue; }
@@ -106,7 +106,7 @@ while read from to subset targets; do
! grep '<U....><U....>' ../localedata/charmaps/$from > /dev/null; then
echo $ac_n "test charmap: $from -> $t $ac_c"
$PROG -f ../localedata/charmaps/$from -t ../localedata/charmaps/$tc \
- testdata/$from > $temp1 ||
+ testdata/$from < /dev/null > $temp1 ||
{ if test $? -gt 128; then exit 1; fi
echo "FAILED"; failed=1; continue; }
echo $ac_n "OK$ac_c"
@@ -117,7 +117,7 @@ while read from to subset targets; do
fi
echo $ac_n " -> $from $ac_c"
$PROG -t ../localedata/charmaps/$from -f ../localedata/charmaps/$tc \
- -o $temp2 $temp1 ||
+ -o $temp2 $temp1 < /dev/null ||
{ if test $? -gt 128; then exit 1; fi
echo "FAILED"; failed=1; continue; }
echo $ac_n "OK$ac_c"
@@ -132,7 +132,7 @@ while read from to subset targets; do
if test "$subset" = N; then
echo $ac_n " suntzu: ASCII -> $to -> ASCII $ac_c"
- $PROG -f ASCII -t $to testdata/suntzus |
+ $PROG -f ASCII -t $to testdata/suntzus < /dev/null |
$PROG -f $to -t ASCII > $temp1 ||
{ if test $? -gt 128; then exit 1; fi
echo "FAILED"; failed=1; continue; }
diff --git a/iconvdata/tst-tables.sh b/iconvdata/tst-tables.sh
index f65b72d..eaf84dc 100755
--- a/iconvdata/tst-tables.sh
+++ b/iconvdata/tst-tables.sh
@@ -263,7 +263,7 @@ while read charset charmap; do
case ${charset} in \#*) continue;; esac
echo -n "Testing ${charset}" 1>&2
if ${SHELL} tst-table.sh ${common_objpfx} ${objpfx} "${run_program_prefix}" \
- ${charset} ${charmap}; then
+ ${charset} ${charmap} < /dev/null; then
echo 1>&2
else
echo "failed: ./tst-table.sh ${common_objpfx} ${objpfx} ${charset} ${charmap}"
diff --git a/localedata/tst-fmon.sh b/localedata/tst-fmon.sh
index 3e3dba9..52d32d0 100755
--- a/localedata/tst-fmon.sh
+++ b/localedata/tst-fmon.sh
@@ -48,7 +48,7 @@ while IFS=" " read locale format value expect; do
LOCPATH=${common_objpfx}localedata \
GCONV_PATH=${common_objpfx}/iconvdata \
${run_program_prefix} ${common_objpfx}localedata/tst-fmon \
- "$locale" "$format" "$value" "$expect" ||
+ "$locale" "$format" "$value" "$expect" < /dev/null ||
errcode=$?
fi
done < $datafile
diff --git a/localedata/tst-numeric.sh b/localedata/tst-numeric.sh
index 71a3058..70ddc40 100644
--- a/localedata/tst-numeric.sh
+++ b/localedata/tst-numeric.sh
@@ -33,7 +33,7 @@ while IFS=" " read locale format value expect; do
if LOCPATH=${common_objpfx}localedata \
GCONV_PATH=${common_objpfx}/iconvdata \
${run_program_prefix} ${common_objpfx}localedata/tst-numeric \
- "$locale" "$format" "$value" "$expect"
+ "$locale" "$format" "$value" "$expect" < /dev/null
then
echo "Locale: \"${locale}\" Format: \"${format}\"" \
"Value: \"${value}\" Expect: \"${expect}\" passed"
diff --git a/localedata/tst-rpmatch.sh b/localedata/tst-rpmatch.sh
index 0fb0cdf..8788879 100755
--- a/localedata/tst-rpmatch.sh
+++ b/localedata/tst-rpmatch.sh
@@ -28,7 +28,7 @@ while IFS=\& read locale string result dummy; do
if [ "$locale" != "#" ]; then
LOCPATH=${common_objpfx}localedata \
GCONV_PATH=${common_objpfx}/iconvdata \
- ${tst_rpmatch} $locale $string $result \
+ ${tst_rpmatch} $locale $string $result < /dev/null \
|| { echo "$locale $string $result FAILED"; exit 1; }
fi
done <<EOF
diff --git a/posix/tst-getconf.sh b/posix/tst-getconf.sh
index b602f3e..701164b 100644
--- a/posix/tst-getconf.sh
+++ b/posix/tst-getconf.sh
@@ -34,7 +34,7 @@ rm -f $logfile
result=0
while read name; do
echo -n "getconf $name: " >> $logfile
- ${run_getconf} "$name" 2>> $logfile >> $logfile
+ ${run_getconf} "$name" < /dev/null 2>> $logfile >> $logfile
if test $? -ne 0; then
echo "*** $name FAILED" >> $logfile
result=1
@@ -212,7 +212,7 @@ EOF
while read name; do
echo -n "getconf $name /: " >> $logfile
- ${run_getconf} "$name" / 2>> $logfile >> $logfile
+ ${run_getconf} "$name" / < /dev/null 2>> $logfile >> $logfile
if test $? -ne 0; then
echo "*** $name FAILED" >> $logfile
result=1
--
Joseph S. Myers
joseph@codesourcery.com
More information about the Libc-alpha
mailing list