Git fork

unpack_loose_header(): simplify next_out assignment

When using OBJECT_INFO_ALLOW_UNKNOWN_TYPE to unpack a header that
doesn't fit into our initial 32-byte buffer, we loop over calls
git_inflate(), feeding it our buffer to the "next_out" pointer each
time. As the code is written, we reset next_out after each inflate call
(and after reading the output), ready for the next loop.

This isn't wrong, but there are a few advantages to setting up
"next_out" right before each inflate call, rather than after:

1. It drops a few duplicated lines of code.

2. It makes it obvious that we always feed a fresh buffer on each call
(and thus can never see Z_BUF_ERROR due to due to a lack of output
space).

3. After we exit the loop, we'll leave stream->next_out pointing to
the end of the fetched data (this is how zlib callers find out how
much data is in the buffer). This doesn't matter in practice, since
nobody looks at it again. But it's probably the least-surprising
thing to do, as it matches how next_out is left when the whole
thing fits in the initial 32-byte buffer (and we don't enter the
loop at all).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

authored by

Jeff King and committed by
Junio C Hamano
03e7c454 8216cf94

+3 -4
+3 -4
object-file.c
··· 1296 1296 * reading the stream. 1297 1297 */ 1298 1298 strbuf_add(header, buffer, stream->next_out - (unsigned char *)buffer); 1299 - stream->next_out = buffer; 1300 - stream->avail_out = bufsiz; 1301 1299 1302 1300 do { 1301 + stream->next_out = buffer; 1302 + stream->avail_out = bufsiz; 1303 + 1303 1304 obj_read_unlock(); 1304 1305 status = git_inflate(stream, 0); 1305 1306 obj_read_lock(); 1306 1307 strbuf_add(header, buffer, stream->next_out - (unsigned char *)buffer); 1307 1308 if (memchr(buffer, '\0', stream->next_out - (unsigned char *)buffer)) 1308 1309 return 0; 1309 - stream->next_out = buffer; 1310 - stream->avail_out = bufsiz; 1311 1310 } while (status != Z_STREAM_END); 1312 1311 return ULHR_TOO_LONG; 1313 1312 }