Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- csum-file.c | 16 +++++++++++++--- csum-file.h | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/csum-file.c b/csum-file.c index 53f5375..4c517d1 100644 --- a/csum-file.c +++ b/csum-file.c @@ -11,6 +11,12 @@ #include "progress.h" #include "csum-file.h" +static void sha1update(struct sha1file *f, const void *data, unsigned offset) +{ + if (f->do_sha1) + git_SHA1_Update(&f->ctx, data, offset); +} + static void flush(struct sha1file *f, void *buf, unsigned int count) { if (0 <= f->check_fd && count) { @@ -47,7 +53,7 @@ void sha1flush(struct sha1file *f) unsigned offset = f->offset; if (offset) { - git_SHA1_Update(&f->ctx, f->buffer, offset); + sha1update(f, f->buffer, offset); flush(f, f->buffer, offset); f->offset = 0; } @@ -58,7 +64,10 @@ int sha1close(struct sha1file *f, unsigned char *result, unsigned int flags) int fd; sha1flush(f); - git_SHA1_Final(f->buffer, &f->ctx); + if (f->do_sha1) + git_SHA1_Final(f->buffer, &f->ctx); + else + hashclr(f->buffer); if (result) hashcpy(result, f->buffer); if (flags & (CSUM_CLOSE | CSUM_FSYNC)) { @@ -110,7 +119,7 @@ int sha1write(struct sha1file *f, void *buf, unsigned int count) buf = (char *) buf + nr; left -= nr; if (!left) { - git_SHA1_Update(&f->ctx, data, offset); + sha1update(f, data, offset); flush(f, data, offset); offset = 0; } @@ -154,6 +163,7 @@ struct sha1file *sha1fd_throughput(int fd, const char *name, struct progress *tp f->tp = tp; f->name = name; f->do_crc = 0; + f->do_sha1 = 1; git_SHA1_Init(&f->ctx); return f; } diff --git a/csum-file.h b/csum-file.h index 3b540bd..c23ea62 100644 --- a/csum-file.h +++ b/csum-file.h @@ -12,7 +12,7 @@ struct sha1file { off_t total; struct progress *tp; const char *name; - int do_crc; + int do_crc, do_sha1; uint32_t crc32; unsigned char buffer[8192]; }; -- 1.7.8.36.g69ee2 -- 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