csum-file: use idempotent git_hash_discard()
Now that it is safe to call git_hash_discard() even after finalizing it, we can simplify our cleanup logic a bit. This is mostly undoing a few bits of 64337aecde (csum-file: always finalize or discard hash, 2026-07-02): - We no longer need a separate free_hashfile_memory() function for finalize_hashfile(). It can just call free_hashfile(), which will now discard (or not) the hash as appropriate. - When f->skip_hash is set, we don't need to discard; we can rely on free_hashfile() to do it. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King committed
Jul 7, 2026 at 23:53 UTC
6728cfba89aa77b38d08154404eda65c1461bcd3
1 file changed
+5
-12
csum-file.c
+5
-12
index 7e81391524..fe18ee1de3 100644
--- a/csum-file.c
+++ b/csum-file.c
@@ -55,19 +55,14 @@ void hashflush(struct hashfile *f)
}
}
-static void free_hashfile_memory(struct hashfile *f)
+void free_hashfile(struct hashfile *f)
{
+ git_hash_discard(&f->ctx);
free(f->buffer);
free(f->check_buffer);
free(f);
}
-void free_hashfile(struct hashfile *f)
-{
- git_hash_discard(&f->ctx);
- free_hashfile_memory(f);
-}
-
int finalize_hashfile(struct hashfile *f, unsigned char *result,
enum fsync_component component, unsigned int flags)
{
@@ -75,12 +70,10 @@ int finalize_hashfile(struct hashfile *f, unsigned char *result,
hashflush(f);
- if (f->skip_hash) {
- git_hash_discard(&f->ctx);
+ if (f->skip_hash)
hashclr(f->buffer, f->algop);
- } else {
+ else
git_hash_final(f->buffer, &f->ctx);
- }
if (result)
hashcpy(result, f->buffer, f->algop);
@@ -105,7 +98,7 @@ int finalize_hashfile(struct hashfile *f, unsigned char *result,
if (close(f->check_fd))
die_errno("%s: sha1 file error on close", f->name);
}
- free_hashfile_memory(f);
+ free_hashfile(f);
return fd;
}