aboutsummaryrefslogtreecommitdiff
path: root/csum-file.c
diff options
context:
space:
mode:
authorDana L. How <danahow@gmail.com>2007-05-13 11:28:19 -0700
committerJunio C Hamano <junkio@cox.net>2007-05-20 21:55:26 -0700
commitf02153696fc319c3c6dba2c27a5f7aed98eec465 (patch)
tree1b17b91195c01dccf13d1d13c82447d5d559735d /csum-file.c
parent93d496a560cdcd4f72c8dee1b0b2efa324e1c3bb (diff)
downloadgit-f02153696fc319c3c6dba2c27a5f7aed98eec465.tar.gz
git-f02153696fc319c3c6dba2c27a5f7aed98eec465.tar.xz
Alter sha1close() 3rd argument to request flush only
update=0 suppressed writing the final SHA-1 but was not used. Now final=0 suppresses SHA-1 finalization, SHA-1 writing, and closing -- in other words, only flush the buffer. Signed-off-by: Dana L. How <danahow@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'csum-file.c')
-rw-r--r--csum-file.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/csum-file.c b/csum-file.c
index 7088f6e93..510934262 100644
--- a/csum-file.c
+++ b/csum-file.c
@@ -29,18 +29,20 @@ static void sha1flush(struct sha1file *f, unsigned int count)
}
}
-int sha1close(struct sha1file *f, unsigned char *result, int update)
+int sha1close(struct sha1file *f, unsigned char *result, int final)
{
unsigned offset = f->offset;
if (offset) {
SHA1_Update(&f->ctx, f->buffer, offset);
sha1flush(f, offset);
+ f->offset = 0;
}
+ if (!final)
+ return 0; /* only want to flush (no checksum write, no close) */
SHA1_Final(f->buffer, &f->ctx);
if (result)
hashcpy(result, f->buffer);
- if (update)
- sha1flush(f, 20);
+ sha1flush(f, 20);
if (close(f->fd))
die("%s: sha1 file error on close (%s)", f->name, strerror(errno));
free(f);