From a9d7ec4587d8eb20f12ebecc427ad818fb0e4971 Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Wed, 22 May 2019 00:10:35 +0200 Subject: refactor: introduce XFREE_CLEAR() Unfortunately we cannot indiscriminately replace xfree() with XFREE_CLEAR(), because comparing pointers after freeing them is a common pattern. Example in `tv_list_remove_items()`: xfree(li); if (li == item2) { break; } Instead we can do it selectively/explicitly. ref #1375 --- src/nvim/lib/klist.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/nvim/lib/klist.h') diff --git a/src/nvim/lib/klist.h b/src/nvim/lib/klist.h index 7ee100ab8c..b80f4be3c2 100644 --- a/src/nvim/lib/klist.h +++ b/src/nvim/lib/klist.h @@ -46,9 +46,9 @@ static inline void kmp_destroy_##name(kmp_##name##_t *mp) { \ size_t k; \ for (k = 0; k < mp->n; k++) { \ - kmpfree_f(mp->buf[k]); xfree(mp->buf[k]); \ + kmpfree_f(mp->buf[k]); XFREE_CLEAR(mp->buf[k]); \ } \ - xfree(mp->buf); xfree(mp); \ + XFREE_CLEAR(mp->buf); XFREE_CLEAR(mp); \ } \ static inline kmptype_t *kmp_alloc_##name(kmp_##name##_t *mp) { \ mp->cnt++; \ @@ -100,7 +100,7 @@ } \ kmp_free(name, kl->mp, p); \ kmp_destroy(name, kl->mp); \ - xfree(kl); \ + XFREE_CLEAR(kl); \ } \ static inline void kl_push_##name(kl_##name##_t *kl, kltype_t d) { \ kl1_##name *q, *p = kmp_alloc(name, kl->mp); \ -- cgit