On Aug 26, 2014, at 8:29 PM, Jeff King <[email protected]> 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 <[email protected]>
>> ---
>> 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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html