From 6728cfba89aa77b38d08154404eda65c1461bcd3 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Tue, 7 Jul 2026 23:53:00 -0400 Subject: [PATCH] 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 Signed-off-by: Junio C Hamano --- csum-file.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/csum-file.c b/csum-file.c index 7e81391524..fe18ee1de3 100644 --- a/csum-file.c +++ b/csum-file.c @@ -55,17 +55,12 @@ void hashflush(struct hashfile *f) } } -static void free_hashfile_memory(struct hashfile *f) -{ - free(f->buffer); - free(f->check_buffer); - free(f); -} - void free_hashfile(struct hashfile *f) { git_hash_discard(&f->ctx); - free_hashfile_memory(f); + free(f->buffer); + free(f->check_buffer); + free(f); } int finalize_hashfile(struct hashfile *f, unsigned char *result, @@ -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; }