Hash :
a9ab1194
Author :
Date :
2009-09-27T08:41:55
test-yesno: work around sparc-dash here-document infelicity Without this change, the literal \177 byte in a here document would make dash 0.5.5.1-3 access uninitialized memory. * tests/test-yesno.sh: Don't put the \177 byte in the here document. Instead, use a marker, "@", and filter through tr to create the desired contents. Reported as <http://bugs.debian.org/548493> by Kurt Roeckx.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
#!/bin/sh
tmpfiles=
trap 'rm -fr $tmpfiles' 1 2 3 15
p=t-yesno-
tmpfiles="${p}in.tmp ${p}xout.tmp ${p}out1.tmp ${p}out.tmp ${p}err.tmp"
# For now, only test with C locale
LC_ALL=C
export LC_ALL
# Find out how to remove carriage returns from output. Solaris /usr/ucb/tr
# does not understand '\r'.
if echo solaris | tr -d '\r' | grep solais > /dev/null; then
cr='\015'
else
cr='\r'
fi
# Test with seekable stdin; the followon process must see remaining data.
tr @ '\177' <<EOF > ${p}in.tmp
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn - entire line consumed
y@n - backspace does not change result
y
does not match either yesexpr or noexpr
n
EOF
cat <<EOF > ${p}xout.tmp
N
Y
Y
N
n
EOF
(./test-yesno${EXEEXT}; ./test-yesno${EXEEXT} 3; cat) \
< ${p}in.tmp > ${p}out1.tmp || exit 1
LC_ALL=C tr -d "$cr" < ${p}out1.tmp > ${p}out.tmp || exit 1
cmp ${p}xout.tmp ${p}out.tmp || exit 1
(./test-yesno${EXEEXT} 3; ./test-yesno${EXEEXT}; cat) \
< ${p}in.tmp > ${p}out1.tmp || exit 1
LC_ALL=C tr -d "$cr" < ${p}out1.tmp > ${p}out.tmp || exit 1
cmp ${p}xout.tmp ${p}out.tmp || exit 1
# Test for behavior on pipe
cat <<EOF > ${p}xout.tmp
Y
N
EOF
echo yes | ./test-yesno${EXEEXT} 2 > ${p}out1.tmp || exit 1
LC_ALL=C tr -d "$cr" < ${p}out1.tmp > ${p}out.tmp || exit 1
cmp ${p}xout.tmp ${p}out.tmp || exit 1
# Test for behavior on EOF
cat <<EOF > ${p}xout.tmp
N
EOF
./test-yesno${EXEEXT} </dev/null > ${p}out1.tmp || exit 1
LC_ALL=C tr -d "$cr" < ${p}out1.tmp > ${p}out.tmp || exit 1
cmp ${p}xout.tmp ${p}out.tmp || exit 1
# Test for behavior when stdin is closed
./test-yesno${EXEEXT} 0 <&- > ${p}out1.tmp 2> ${p}err.tmp && exit 1
LC_ALL=C tr -d "$cr" < ${p}out1.tmp > ${p}out.tmp || exit 1
cmp ${p}xout.tmp ${p}out.tmp || exit 1
test -s ${p}err.tmp || exit 1
# Cleanup
rm -fr $tmpfiles
exit 0