copy.c::copy_fd() - do not leak file descriptor on error return.
authorJunio C Hamano <junkio@cox.net>
Sat, 5 Nov 2005 19:02:56 +0000 (11:02 -0800)
committerJunio C Hamano <junkio@cox.net>
Sat, 5 Nov 2005 19:02:56 +0000 (11:02 -0800)
Signed-off-by: Junio C Hamano <junkio@cox.net>
copy.c

diff --git a/copy.c b/copy.c
index 2009275..e1cd5d0 100644 (file)
--- a/copy.c
+++ b/copy.c
@@ -10,10 +10,13 @@ int copy_fd(int ifd, int ofd)
                if (!len)
                        break;
                if (len < 0) {
+                       int read_error;
                        if (errno == EAGAIN)
                                continue;
+                       read_error = errno;
+                       close(ifd);
                        return error("copy-fd: read returned %s",
-                                    strerror(errno));
+                                    strerror(read_error));
                }
                while (1) {
                        int written = write(ofd, buf, len);