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>
This commit is contained in:
parent
93d496a560
commit
f02153696f
@ -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;
|
unsigned offset = f->offset;
|
||||||
if (offset) {
|
if (offset) {
|
||||||
SHA1_Update(&f->ctx, f->buffer, offset);
|
SHA1_Update(&f->ctx, f->buffer, offset);
|
||||||
sha1flush(f, 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);
|
SHA1_Final(f->buffer, &f->ctx);
|
||||||
if (result)
|
if (result)
|
||||||
hashcpy(result, f->buffer);
|
hashcpy(result, f->buffer);
|
||||||
if (update)
|
sha1flush(f, 20);
|
||||||
sha1flush(f, 20);
|
|
||||||
if (close(f->fd))
|
if (close(f->fd))
|
||||||
die("%s: sha1 file error on close (%s)", f->name, strerror(errno));
|
die("%s: sha1 file error on close (%s)", f->name, strerror(errno));
|
||||||
free(f);
|
free(f);
|
||||||
|
Loading…
Reference in New Issue
Block a user