svn commit: r323123 - in head/usr.bin/tail: . tests
Ngie Cooper
yaneurabeya at gmail.com
Sat Sep 2 01:26:03 UTC 2017
> On Sep 1, 2017, at 15:37, Conrad Meyer <cem at 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
More information about the svn-src-all
mailing list