if ((pbuf - buf) && fwrite (buf, pbuf - buf, 1, stdout) != 1)
{
error (0, errno, _("standard output"));
+ clearerr (stdout);
return EXIT_FAILURE;
}
for (j = i; j < argc; j++)
|| putchar (j == argc - 1 ? '\n' : ' ') == EOF)
{
error (0, errno, _("standard output"));
+ clearerr (stdout);
return EXIT_FAILURE;
}
}
done
# Check the many small items case,
-# both fitting and overflowing the internal buffer
-external=env
-if external true $(seq 4000); then
+# both fitting and overflowing the internal buffer.
+# First check that 4000 arguments supported.
+if test 4000 -eq $(sh -c 'echo $#' 0 $(seq 4000)); then
for i in 100 4000; do
seq $i | paste -s -d ' ' | sed p > out.1
yes $(seq $i) | head -n2 > out.2
done
fi
+# Check a single appropriate diagnostic is output on write error
+if test -w /dev/full && test -c /dev/full; then
+ # The single output diagnostic expected,
+ # (without the possibly varying :strerror(ENOSPC) suffix).
+ printf '%s\n' "yes: standard output" > exp
+
+ for size in 1 16384; do
+ returns_ 1 yes "$(printf %${size}s '')" >/dev/full 2>errt
+ sed 's/\(yes:.*\):.*/\1/' errt > err
+ compare exp err || fail=1
+ done
+fi
+
Exit $fail