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>
This commit is contained in:
committed by
Junio C Hamano
parent
84b5c1a099
commit
547f719d9b
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user