maint: handle file sizes more reliably
commit9d308df13271a852aee7d46c65432fa84145ea31
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 10 May 2012 06:53:16 +0000 (9 23:53 -0700)
committerJim Meyering <meyering@redhat.com>
Thu, 10 May 2012 09:02:42 +0000 (10 11:02 +0200)
tree4973d91ba1d10e86875e8c2be8079dca131dad85
parent2c436decf8bc57a9173c940a26c80358d499e1b6
maint: handle file sizes more reliably

Problem reported by Samuel Thibault in <http://bugs.gnu.org/11424>.
* NEWS: Document this.
* src/dd.c (skip): Handle skipping past EOF on shared or typed
memory objects the same way as with regular files.
(dd_copy): It's OK to truncate shared memory objects.
* src/du.c (duinfo_add): Check for overflow.
(print_only_size): Report overflow.
(process_file): Ignore negative file sizes in the --apparent-size case.
* src/od.c (skip): Fix comment about st_size.
* src/split.c (main):
* src/truncate.c (do_ftruncate, main):
On files where st_size is not portable, fall back on using lseek
with SEEK_END to determine the size.  Although strictly speaking
POSIX says the behavior is implementation-defined, in practice
if lseek returns a nonnegative value it's a reasonable one to
use for the file size.
* src/system.h (usable_st_size): Symlinks have reliable st_size too.
* tests/misc/truncate-dir-fail: Don't assume that getting the size
of a dir is not allowed, as it's now allowed on many platforms,
e.g., GNU/Linux.
NEWS
src/dd.c
src/du.c
src/od.c
src/split.c
src/system.h
src/truncate.c
tests/misc/truncate-dir-fail