]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
(dump): Correct loop-termination criterion.
authorJim Meyering <jim@meyering.net>
Fri, 7 Jul 1995 04:46:03 +0000 (04:46 +0000)
committerJim Meyering <jim@meyering.net>
Fri, 7 Jul 1995 04:46:03 +0000 (04:46 +0000)
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

index ffce0d6a0d1431f61b6c262865854edb198b7fef..28fdc66d4598a8ffbf2968da6be48a443df77592 100644 (file)
--- 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;