git-compat-util: add a FREE_AND_NULL() wrapper around free(ptr); ptr = NULL
commit481df65f4f72582369eea8d002070c5dff38f8e6
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Thu, 15 Jun 2017 21:06:59 +0000 (15 21:06 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 15 Jun 2017 21:56:39 +0000 (15 14:56 -0700)
treea3fb4da57f398d6d6fd9530997384b933afd9ad2
parent97e2ff464302565877a00b8a9aa6a2d85bd1445e
git-compat-util: add a FREE_AND_NULL() wrapper around free(ptr); ptr = NULL

Add a FREE_AND_NULL() wrapper marco for the common pattern of freeing
a pointer and assigning NULL to it right afterwards.

The implementation is similar to the (currently unused) XDL_PTRFREE
macro in xdiff/xmacros.h added in commit 3443546f6e ("Use a *real*
built-in diff generator", 2006-03-24). The only difference is that
free() is called unconditionally, see [1].

See [2] for a suggested alternative which does this via a function
instead of a macro. As covered in replies to that message, while it's
a viable approach, it would introduce caveats which this approach
doesn't have, so that potential change is left to a future follow-up
change.

This merely allows us to translate exactly what we're doing now to a
less verbose & idiomatic form using a macro, while guaranteeing that
we don't introduce any functional changes.

1. <alpine.DEB.2.20.1608301948310.129229@virtualbox>
   (http://public-inbox.org/git/alpine.DEB.2.20.1608301948310.129229@virtualbox/)

2. <20170610032143.GA7880@starla>
   (https://public-inbox.org/git/20170610032143.GA7880@starla/)

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-compat-util.h