From: Jim Meyering Date: Tue, 14 Aug 2007 07:46:32 +0000 (+0200) Subject: od: fix a bug that arises when skipping exact length of file X-Git-Tag: v6.9.89~200 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1490f2dbf33ca75f060890013fb0d8caf28225aa;p=thirdparty%2Fcoreutils.git od: fix a bug that arises when skipping exact length of file * NEWS: Document the bug fix. * src/od.c (skip): Call fseek even when n_skip is exactly the same as the length of the current file. Otherwise, the next iteration would use unadjusted input stream pointer, thus ignoring the desired "skip". Report and patch by Paul GHALEB. --- diff --git a/ChangeLog b/ChangeLog index 1cd7390b42..df1718e74f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-08-14 Jim Meyering + + od: fix a bug that arises when skipping exact length of file + * NEWS: Document the bug fix. + * src/od.c (skip): Call fseek even when n_skip is exactly the + same as the length of the current file. Otherwise, the next + iteration would use unadjusted input stream pointer, thus ignoring + the desired "skip". Report and patch by Paul GHALEB. + 2007-08-10 Paul Eggert Accommodate more xstrtol changes. diff --git a/NEWS b/NEWS index 83d06b7537..13d3402f10 100644 --- a/NEWS +++ b/NEWS @@ -98,6 +98,11 @@ GNU coreutils NEWS -*- outline -*- ln=target attribute) would mistakenly output the string "target" before the name of each symlink. [introduced in coreutils-6.0] + "od -j L FILE" had a bug: when the number of bytes to skip, L, is exactly + the same as the length of FILE, od would skip *no* bytes. When the number + of bytes to skip is exactly the sum of the lengths of the first N files, + od would skip only the first N-1 files. [introduced in textutils-2.0.9] + seq no longer mishandles obvious cases like "seq 0 0.000001 0.000003", so workarounds like "seq 0 0.000001 0.0000031" are no longer needed. diff --git a/THANKS b/THANKS index ae5269f31b..cdddec497f 100644 --- a/THANKS +++ b/THANKS @@ -397,6 +397,7 @@ Oskar Liljeblad osk@hem.passagen.se Pádraig Brady P@draigBrady.com Patrick Mauritz oxygene@studentenbude.ath.cx Paul Eggert eggert@twinsun.com +Paul Ghaleb paul.ghaleb@st.com Paul Jarc prj@po.cwru.edu Paul Nevai nevai@ops.mps.ohio-state.edu Paul Sauer paul@alexa.com diff --git a/src/od.c b/src/od.c index 1e77f92084..0abce599a5 100644 --- a/src/od.c +++ b/src/od.c @@ -1034,13 +1034,12 @@ skip (uintmax_t n_skip) { /* The st_size field is valid only for regular files (and for symbolic links, which cannot occur here). - If the number of bytes left to skip is at least - as large as the size of the current file, we can - decrement n_skip and go on to the next file. */ - + If the number of bytes left to skip is larger than + the size of the current file, we can decrement + n_skip and go on to the next file. */ if (S_ISREG (file_stats.st_mode) && 0 <= file_stats.st_size) { - if ((uintmax_t) file_stats.st_size <= n_skip) + if ((uintmax_t) file_stats.st_size < n_skip) n_skip -= file_stats.st_size; else {