Signed-off-by: Liu Yubao <yubao.liu@xxxxxxxxx> --- sha1_file.c | 16 ++++++++++++---- 1 files changed, 12 insertions(+), 4 deletions(-) diff --git a/sha1_file.c b/sha1_file.c index 05a9fa3..053b564 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -2328,7 +2328,7 @@ static int create_tmpfile(char *buffer, size_t bufsiz, const char *filename) } static int write_loose_object(const unsigned char *sha1, char *hdr, int hdrlen, - void *buf, unsigned long len, time_t mtime) + void *buf, unsigned long len, time_t mtime, int dont_deflate) { int fd, size, ret; unsigned char *compressed; @@ -2345,6 +2345,12 @@ static int write_loose_object(const unsigned char *sha1, char *hdr, int hdrlen, return error("unable to create temporary sha1 filename %s: %s\n", tmpfile, strerror(errno)); } + if (dont_deflate) { + if (write_buffer(fd, hdr, hdrlen) < 0 || write_buffer(fd, buf, len) < 0) + die("unable to write sha1 file"); + goto L_close_file; + } + /* Set it up */ memset(&stream, 0, sizeof(stream)); deflateInit(&stream, zlib_compression_level); @@ -2376,9 +2382,11 @@ static int write_loose_object(const unsigned char *sha1, char *hdr, int hdrlen, if (write_buffer(fd, compressed, size) < 0) die("unable to write sha1 file"); - close_sha1_file(fd); free(compressed); +L_close_file: + close_sha1_file(fd); + if (mtime) { struct utimbuf utb; utb.actime = mtime; @@ -2405,7 +2413,7 @@ int write_sha1_file(void *buf, unsigned long len, const char *type, unsigned cha hashcpy(returnsha1, sha1); if (has_sha1_file(sha1)) return 0; - return write_loose_object(sha1, hdr, hdrlen, buf, len, 0); + return write_loose_object(sha1, hdr, hdrlen, buf, len, 0, 1); } int force_object_loose(const unsigned char *sha1, time_t mtime) @@ -2423,7 +2431,7 @@ int force_object_loose(const unsigned char *sha1, time_t mtime) if (!buf) return error("cannot read sha1_file for %s", sha1_to_hex(sha1)); hdrlen = sprintf(hdr, "%s %lu", typename(type), len) + 1; - ret = write_loose_object(sha1, hdr, hdrlen, buf, len, mtime); + ret = write_loose_object(sha1, hdr, hdrlen, buf, len, mtime, 1); free(buf); return ret; -- 1.6.1.rc1.5.gde86c -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html