checkout: automerge local changes while switching branches.
[gitweb.git] / csum-file.c
index 907efbf860152347bffe0cc999fdacad2a5f0724..5f9249aeedfa7d4156cf412da6a7e7d77f33ff86 100644 (file)
@@ -15,7 +15,7 @@ static int sha1flush(struct sha1file *f, unsigned int count)
        void *buf = f->buffer;
 
        for (;;) {
-               int ret = write(f->fd, buf, count);
+               int ret = xwrite(f->fd, buf, count);
                if (ret > 0) {
                        buf += ret;
                        count -= ret;
@@ -25,8 +25,6 @@ static int sha1flush(struct sha1file *f, unsigned int count)
                }
                if (!ret)
                        die("sha1 file '%s' write error. Out of diskspace", f->name);
-               if (errno == EAGAIN || errno == EINTR)
-                       continue;
                die("sha1 file '%s' write error (%s)", f->name, strerror(errno));
        }
 }
@@ -45,6 +43,7 @@ int sha1close(struct sha1file *f, unsigned char *result, int update)
                sha1flush(f, 20);
        if (close(f->fd))
                die("%s: sha1 file error on close (%s)", f->name, strerror(errno));
+       free(f);
        return 0;
 }