On Aug 26, 2014, at 8:29 PM, Jeff King <p...@peff.net> wrote:

> On Tue, Aug 26, 2014 at 05:23:24PM +0200, Steffen Prohaska wrote:
> 
>> The caller opened the fd, so it should be responsible for closing it.
>> 
>> Signed-off-by: Steffen Prohaska <proha...@zib.de>
>> ---
>> copy.c     | 5 +----
>> lockfile.c | 3 +++
>> 2 files changed, 4 insertions(+), 4 deletions(-)
>> 
>> diff --git a/copy.c b/copy.c
>> index a7f58fd..d0a1d82 100644
>> --- a/copy.c
>> +++ b/copy.c
>> @@ -10,7 +10,6 @@ int copy_fd(int ifd, int ofd)
>>                      break;
>>              if (len < 0) {
>>                      int read_error = errno;
>> -                    close(ifd);
>>                      return error("copy-fd: read returned %s",
>>                                   strerror(read_error));
>>              }
> 
> This saved errno is not necessary anymore (the problem was that close()
> clobbered the error in the original code). It can go away, and we can
> even drop the curly braces.
> 
>> @@ -21,17 +20,14 @@ int copy_fd(int ifd, int ofd)
>>                              len -= written;
>>                      }
>>                      else if (!written) {
>> -                            close(ifd);
>>                              return error("copy-fd: write returned 0");
>>                      } else {
>>                              int write_error = errno;
>> -                            close(ifd);
>>                              return error("copy-fd: write returned %s",
>>                                           strerror(write_error));
>>                      }
>>              }
> 
> Ditto here. Actually, isn't this whole write just a reimplementation of
> write_in_full? The latter treats a return of 0 as ENOSPC rather than
> using a custom message, but I think that is sane.
> 
> All together:

Makes all sense, and seems sane to me, too.

Junio, I saw that you have the changes on pu with 'SQUASH???...'.  Will you
squash it, or shall I send another complete update of the patch series?

        Steffen



> ---
> copy.c | 28 +++++-----------------------
> 1 file changed, 5 insertions(+), 23 deletions(-)
> 
> diff --git a/copy.c b/copy.c
> index a7f58fd..53a9ece 100644
> --- a/copy.c
> +++ b/copy.c
> @@ -4,34 +4,16 @@ int copy_fd(int ifd, int ofd)
> {
>       while (1) {
>               char buffer[8192];
> -             char *buf = buffer;
>               ssize_t len = xread(ifd, buffer, sizeof(buffer));
>               if (!len)
>                       break;
> -             if (len < 0) {
> -                     int read_error = errno;
> -                     close(ifd);
> +             if (len < 0)
>                       return error("copy-fd: read returned %s",
> -                                  strerror(read_error));
> -             }
> -             while (len) {
> -                     int written = xwrite(ofd, buf, len);
> -                     if (written > 0) {
> -                             buf += written;
> -                             len -= written;
> -                     }
> -                     else if (!written) {
> -                             close(ifd);
> -                             return error("copy-fd: write returned 0");
> -                     } else {
> -                             int write_error = errno;
> -                             close(ifd);
> -                             return error("copy-fd: write returned %s",
> -                                          strerror(write_error));
> -                     }
> -             }
> +                                  strerror(errno));
> +             if (write_in_full(ofd, buffer, len) < 0)
> +                     return error("copy-fd: write returned %s",
> +                                  strerror(errno));
>       }
> -     close(ifd);
>       return 0;
> }
> 

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to