coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] tail: remove excessive checks on buffer sizes before printin


From: Pádraig Brady
Subject: Re: [PATCH] tail: remove excessive checks on buffer sizes before printing
Date: Mon, 21 Jun 2021 13:26:21 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Thunderbird/84.0

On 20/06/2021 21:19, Pádraig Brady wrote:
On 20/06/2021 15:54, Nikolay Nechaev wrote:
* src/tail.c: remove excessive size checks before calls to
`xwrite_stdout`

`xwrite_stdout` itself checks if what is to be printed out
has positive size, and only proceeds then. There is no need
to check if buffers are of positive size before printing
them out with `xwrite_stdout`

Signed-off-by: Nikolay Nechaev <Nikolay_Nechaev@mail.ru>
---
   src/tail.c | 11 +++++------
   1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/src/tail.c b/src/tail.c
index ff567560d..44a6e3e68 100644
--- a/src/tail.c
+++ b/src/tail.c
@@ -579,8 +579,7 @@ file_lines (char const *pretty_filename, int fd, uintmax_t 
n_lines,
               {
                 /* If this newline isn't the last character in the buffer,
                    output the part that is after it.  */
-              if (n != bytes_read - 1)
-                xwrite_stdout (nl + 1, bytes_read - (n + 1));
+              xwrite_stdout (nl + 1, bytes_read - (n + 1));
                 *read_pos += dump_remainder (false, pretty_filename, fd,
                                              end_pos - (pos + bytes_read));
                 return true;
@@ -881,8 +880,8 @@ start_bytes (char const *pretty_filename, int fd, uintmax_t 
n_bytes,
         else
           {
             size_t n_remaining = bytes_read - n_bytes;
-          if (n_remaining)
-            xwrite_stdout (&buffer[n_bytes], n_remaining);
+          // Print extra characters if there are any
+          xwrite_stdout (&buffer[n_bytes], n_remaining);
             break;
           }
       }
@@ -923,8 +922,8 @@ start_lines (char const *pretty_filename, int fd, uintmax_t 
n_lines,
             ++p;
             if (--n_lines == 0)
               {
-              if (p < buffer_end)
-                xwrite_stdout (p, buffer_end - p);
+              // Print extra characters if there are any
+              xwrite_stdout (p, buffer_end - p);
                 return 0;
               }
           }

This guard has been internal to the function since 1994:
https://github.com/coreutils/coreutils/commit/32340b45e

So all guards that check != 0 are redundant.
However those that check >= 0 are not.
The last one (in start_lines()) is such a case.
I.e. p can be == buffer_end, so ++p == buffer_end +1,
so buffer_end - p == -1.

I will apply the first two chunks if you agree.

Nikolay your response to the list didn't make it to my email
(I noticed it by chance in looking at the archives).
I also notice two initial emails from you in the archives,
so perhaps there is something wrong with your email setup?

In any case I see you concurred with the above,
so I've pushed the first two hunks of your diff.

thanks,
Pádraig



reply via email to

[Prev in Thread] Current Thread [Next in Thread]