> On Sep 1, 2017, at 15:37, Conrad Meyer <c...@freebsd.org> wrote: > > Author: cem > Date: Fri Sep 1 22:37:49 2017 > New Revision: 323123 > URL: https://svnweb.freebsd.org/changeset/base/323123 > > Log: > tail(1): Do not print bogus errno string > > In the case where write(2) does not return -1, it does not initialize errno. > This can happen when a broken pipe causes a short write. > > I attempted to adapt the submitted test case to ATF but could not figure out > how to make the test run in the ATF environment. So the aborted test is > left disabled, in case someone would like to run it manually or fix it. > > PR: 221976 > Submitted by: <martin AT lispworks.com> (earlier version) > Sponsored by: Dell EMC Isilon > > Modified: > head/usr.bin/tail/extern.h > head/usr.bin/tail/tests/tail_test.sh > > Modified: head/usr.bin/tail/extern.h > ============================================================================== > --- head/usr.bin/tail/extern.h Fri Sep 1 22:04:45 2017 (r323122) > +++ head/usr.bin/tail/extern.h Fri Sep 1 22:37:49 2017 (r323123) > @@ -32,9 +32,15 @@ > */ > > #define WR(p, size) do { \ > - if (write(STDOUT_FILENO, p, size) != (ssize_t)size) \ > - oerr(); \ > - } while(0) > + ssize_t res; \ > + res = write(STDOUT_FILENO, p, size); \ > + if (res != (ssize_t)size) { \ > + if (res == -1) \ > + oerr(); \ > + else \ > + errx(1, "stdout"); \ > + } \ > +} while (0) > > #define TAILMAPLEN (4<<20) > > > Modified: head/usr.bin/tail/tests/tail_test.sh > ============================================================================== > --- head/usr.bin/tail/tests/tail_test.sh Fri Sep 1 22:04:45 2017 > (r323122) > +++ head/usr.bin/tail/tests/tail_test.sh Fri Sep 1 22:37:49 2017 > (r323123) > @@ -215,7 +215,20 @@ longfile_rn2500_body() > atf_check cmp expectfile outpipe > } > > +atf_test_case broken_pipe > +broken_pipe_head() > +{ > + atf_set "descr" "Do not print bogus errno based output on short writes" > +} > +broken_pipe_body() > +{ > + atf_expect_fail "Can't seem to get testcase to work in test environment. > Reproduces easily in interactive shell." > > + seq -f '%128g' 1 1000 > ints > + atf_check -s exit:1 -o ignore -e "inline:tail: stdout" tail -n 856 ints > | awk '{ exit }'
Use need to use -x to run the command through the shell, e.g. atf_check ... -x 'tail 856 ints| awk "{exit}"' What the original pattern does is pipes atf_check to awk--which probably isn't what you want. Seems like it could be written to not use a temporary file too.. I'll have to think about this. -Ngie _______________________________________________ svn-src-all@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"