summaryrefslogtreecommitdiff
path: root/object-file.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2025-02-25 01:33:51 -0500
committerJunio C Hamano <gitster@pobox.com>2025-02-25 10:25:49 -0800
commit547f719d9b022e87eb8cf3cb7a7632822b996e29 (patch)
tree9eb31d774fd24b2c3f163e4e73f5cf2eff5c2a75 /object-file.c
parent84b5c1a099e6df35f4b54d651b425a894513e62b (diff)
unpack_loose_rest(): simplify error handling
Inflating a loose object is considered successful only if we got Z_STREAM_END and there were no more bytes. We check both of those conditions and return success, but then have to check them a second time to decide which error message to produce. I.e., we do something like this: if (!error_1 && !error_2) ...return success... if (error_1) ...handle error1... else if (error_2) ...handle error2... ...common error handling... This repetition was the source of a small bug fixed in an earlier commit (our Z_STREAM_END check was not the same in the two conditionals). Instead we can chain them all into a single if/else cascade, which avoids repeating ourselves: if (error_1) ...handle error1... else if (error_2) ...handle error2.... else ...return success... ...common error handling... Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'object-file.c')
-rw-r--r--object-file.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/object-file.c b/object-file.c
index f9713e4e8b..9f6e8504fb 100644
--- a/object-file.c
+++ b/object-file.c
@@ -1347,15 +1347,15 @@ static void *unpack_loose_rest(git_zstream *stream,
obj_read_lock();
}
}
- if (status == Z_STREAM_END && !stream->avail_in) {
- return buf;
- }
if (status != Z_STREAM_END)
error(_("corrupt loose object '%s'"), oid_to_hex(oid));
else if (stream->avail_in)
error(_("garbage at end of loose object '%s'"),
oid_to_hex(oid));
+ else
+ return buf;
+
free(buf);
return NULL;
}