From: Jeff King Date: Wed, 8 Jul 2026 03:53:00 +0000 (-0400) Subject: csum-file: use idempotent git_hash_discard() X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=6728cfba89aa77b38d08154404eda65c1461bcd3;p=thirdparty%2Fgit.git 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 --- diff --git a/csum-file.c b/csum-file.c 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; }