]> git.ipfire.org Git - thirdparty/coreutils.git/commit
wc: don't miscount /sys and similar file systems
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 7 Oct 2014 23:46:08 +0000 (16:46 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 7 Oct 2014 23:47:37 +0000 (16:47 -0700)
commit2662702b9e8643f62c670bbf2fa94b1be1ccf9af
treec82775c20abc304fa4f187218830dc3aa2f7e481
parentb020002b4bfae55d5bbcf66bd7ce787a4e6da689
wc: don't miscount /sys and similar file systems

Fix similar problems in head, od, split, tac, and tail.
Reported by George Shuklin in: http://bugs.gnu.org/18621
* NEWS: Document this.
* src/head.c (elseek): Move up.
(elide_tail_bytes_pipe, elide_tail_lines_pipe): New arg
CURRENT_POS.  All uses changed.
(elide_tail_bytes_file, elide_tail_lines_file):
New arg ST and remove arg SIZE.  All uses changed.
* src/head.c (elide_tail_bytes_file):
* src/od.c (skip): Avoid optimization for /sys files, where
st_size is bogus and st_size == st_blksize.
Don't report error at EOF when not optimizing.
* src/head.c, src/od.c, src/tail.c: Include "stat-size.h".
* src/split.c (input_file_size): New function.
(bytes_split, lines_chunk_split, bytes_chunk_extract): New arg
INITIAL_READ.  All uses changed. Use it to double-check st_size.
* src/tac.c (tac_seekable): New arg FILE_POS.  All uses changed.
(copy_to_temp): Return size of temp file.  All uses changed.
* src/tac.c (tac_seekable):
* src/tail.c (tail_bytes):
* src/wc.c (wc):
Don't trust st_size; double-check by reading.
* src/wc.c (wc): New arg CURRENT_POS.  All uses changed.
* tests/local.mk (all_tests): Add tests/misc/wc-proc.sh,
tests/misc/od-j.sh, tests/tail-2/tail-c.sh.
* tests/misc/head-c.sh:
* tests/misc/tac-2-nonseekable.sh:
* tests/split/b-chunk.sh:
Add tests for problems with /proc and /sys files.
* tests/misc/od-j.sh, tests/misc/wc-proc.sh, tests/tail-2/tail-c.sh:
New files.
14 files changed:
NEWS
src/head.c
src/od.c
src/split.c
src/tac.c
src/tail.c
src/wc.c
tests/local.mk
tests/misc/head-c.sh
tests/misc/od-j.sh [new file with mode: 0755]
tests/misc/tac-2-nonseekable.sh
tests/misc/wc-proc.sh [new file with mode: 0755]
tests/split/b-chunk.sh
tests/tail-2/tail-c.sh [new file with mode: 0755]