From: Jim Meyering Date: Fri, 7 Jul 1995 04:46:03 +0000 (+0000) Subject: (dump): Correct loop-termination criterion. X-Git-Tag: textutils-1_12_1~66 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=67718aff76c90766c1167612f790e7aa655ff941;p=thirdparty%2Fcoreutils.git (dump): Correct loop-termination criterion. Before, running `printf 1234| ./od --width=4 --read-bytes=4' printed output for 8 bytes -- the last four were garbage. This happened only when the dump limit, N, was specified (with --read-bytes=N) and N was a multiple of bytes_per_block (usually 16, but 4 in this example). From Andreas Schwab. --- diff --git a/src/od.c b/src/od.c index ffce0d6a0d..28fdc66d45 100644 --- a/src/od.c +++ b/src/od.c @@ -1397,12 +1397,16 @@ dump () { end_offset = n_bytes_to_skip + max_bytes_to_format; - n_bytes_read = 0; - while (current_offset < end_offset) + while (1) { size_t n_needed; n_needed = MIN (end_offset - current_offset, (off_t) bytes_per_block); + if (n_needed == 0) + { + n_bytes_read = 0; + break; + } err |= read_block (n_needed, block[idx], &n_bytes_read); if (n_bytes_read < bytes_per_block) break;