]> git.ipfire.org Git - thirdparty/git.git/commitdiff
unpack_loose_rest(): rewrite return handling for clarity
authorJeff King <peff@peff.net>
Tue, 25 Feb 2025 06:34:21 +0000 (01:34 -0500)
committerJunio C Hamano <gitster@pobox.com>
Tue, 25 Feb 2025 18:25:49 +0000 (10:25 -0800)
We have a pattern like:

  if (error1)
     ...handle error 1...
  else if (error2)
     ...handle error 2...
  else
     ...return buf...
  ...free buf and return NULL...

This is a little subtle because it is the return in the success block
that lets us skip the common error handling. Rewrite this instead to
free the buffer in each error path, marking it as NULL, and then all
code paths can use the common return.

This should make the logic a bit easier to follow. It does mean
duplicating the buf cleanup for errors, but it's a single line.

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

index 9f6e8504fb80445d18dc39e6826c41c2cbe15cc7..e463b4bad3e4bcf1413c9a12fd66b302c50f3e65 100644 (file)
@@ -1348,16 +1348,16 @@ static void *unpack_loose_rest(git_zstream *stream,
                }
        }
 
-       if (status != Z_STREAM_END)
+       if (status != Z_STREAM_END) {
                error(_("corrupt loose object '%s'"), oid_to_hex(oid));
-       else if (stream->avail_in)
+               FREE_AND_NULL(buf);
+       } else if (stream->avail_in) {
                error(_("garbage at end of loose object '%s'"),
                      oid_to_hex(oid));
-       else
-               return buf;
+               FREE_AND_NULL(buf);
+       }
 
-       free(buf);
-       return NULL;
+       return buf;
 }
 
 /*