diff options
author | Jeff King <peff@peff.net> | 2025-02-25 01:33:51 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2025-02-25 10:25:49 -0800 |
commit | 547f719d9b022e87eb8cf3cb7a7632822b996e29 (patch) | |
tree | 9eb31d774fd24b2c3f163e4e73f5cf2eff5c2a75 /object-file.c | |
parent | 84b5c1a099e6df35f4b54d651b425a894513e62b (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.c | 6 |
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; } |