From 67718aff76c90766c1167612f790e7aa655ff941 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Fri, 7 Jul 1995 04:46:03 +0000 Subject: [PATCH] (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. --- src/od.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/od.c b/src/od.c index ffce0d6..28fdc66 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; -- 2.7.4