From: Jeff King <peff@peff.net>
To: Steffen Prohaska <prohaska@zib.de>
Cc: Junio C Hamano <gitster@pobox.com>,
git@vger.kernel.org, pclouds@gmail.com, john@keeping.me.uk,
schacon@gmail.com
Subject: Re: [PATCH v6 5/6] Change copy_fd() to not close input fd
Date: Tue, 26 Aug 2014 14:29:06 -0400 [thread overview]
Message-ID: <20140826182905.GD17546@peff.net> (raw)
In-Reply-To: <1409066605-4851-6-git-send-email-prohaska@zib.de>
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 <prohaska@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:
---
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;
}
next prev parent reply other threads:[~2014-08-26 18:29 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-26 15:23 [PATCH v6 0/6] Stream fd to clean filter; GIT_MMAP_LIMIT, GIT_ALLOC_LIMIT with git_env_ulong() Steffen Prohaska
2014-08-26 15:23 ` [PATCH v6 1/6] convert: drop arguments other than 'path' from would_convert_to_git() Steffen Prohaska
2014-08-26 15:23 ` [PATCH v6 2/6] Add git_env_ulong() to parse environment variable Steffen Prohaska
2014-08-26 18:21 ` Jeff King
2014-08-26 20:20 ` Junio C Hamano
2014-08-26 20:31 ` Jeff King
2014-08-26 21:54 ` Junio C Hamano
2014-08-27 4:46 ` Jeff King
2014-08-27 14:47 ` Junio C Hamano
2014-08-28 15:21 ` Steffen Prohaska
2014-08-28 17:13 ` Junio C Hamano
2014-08-26 15:23 ` [PATCH v6 3/6] Change GIT_ALLOC_LIMIT check to use git_env_ulong() Steffen Prohaska
2014-08-26 15:23 ` [PATCH v6 4/6] Introduce GIT_MMAP_LIMIT to allow testing expected mmap size Steffen Prohaska
2014-08-26 15:23 ` [PATCH v6 5/6] Change copy_fd() to not close input fd Steffen Prohaska
2014-08-26 17:10 ` Junio C Hamano
2014-08-26 18:29 ` Jeff King [this message]
2014-08-28 15:37 ` Steffen Prohaska
2014-08-28 17:15 ` Junio C Hamano
2014-08-26 15:23 ` [PATCH v6 6/6] convert: stream from fd to required clean filter to reduce used address space Steffen Prohaska
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140826182905.GD17546@peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=john@keeping.me.uk \
--cc=pclouds@gmail.com \
--cc=prohaska@zib.de \
--cc=schacon@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).