diff options
author | Matthew DeVore <matvore@google.com> | 2019-06-27 15:54:13 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-06-28 08:41:53 -0700 |
commit | 5a133e8a7f7c28c57f7a0a85e57692b8b781d896 (patch) | |
tree | 4c044c67cdbaec4319a55cfcffc0db548e7c4cf7 /cache.h | |
parent | list-objects-filter-options: allow mult. --filter (diff) | |
download | tgif-5a133e8a7f7c28c57f7a0a85e57692b8b781d896.tar.xz |
list-objects-filter-options: clean up use of ALLOC_GROW
Introduce a new macro ALLOC_GROW_BY which automatically zeros the added
array elements and takes care of updating the nr value. Use the macro in
code introduced earlier in this patchset.
Signed-off-by: Matthew DeVore <matvore@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'cache.h')
-rw-r--r-- | cache.h | 22 |
1 files changed, 22 insertions, 0 deletions
@@ -660,6 +660,9 @@ int daemonize(void); * at least 'nr' entries; the number of entries currently allocated * is 'alloc', using the standard growing factor alloc_nr() macro. * + * Consider using ALLOC_GROW_BY instead of ALLOC_GROW as it has some + * added niceties. + * * DO NOT USE any expression with side-effect for 'x', 'nr', or 'alloc'. */ #define ALLOC_GROW(x, nr, alloc) \ @@ -673,6 +676,25 @@ int daemonize(void); } \ } while (0) +/* + * Similar to ALLOC_GROW but handles updating of the nr value and + * zeroing the bytes of the newly-grown array elements. + * + * DO NOT USE any expression with side-effect for any of the + * arguments. + */ +#define ALLOC_GROW_BY(x, nr, increase, alloc) \ + do { \ + if (increase) { \ + size_t new_nr = nr + (increase); \ + if (new_nr < nr) \ + BUG("negative growth in ALLOC_GROW_BY"); \ + ALLOC_GROW(x, new_nr, alloc); \ + memset((x) + nr, 0, sizeof(*(x)) * (increase)); \ + nr = new_nr; \ + } \ + } while (0) + /* Initialize and use the cache information */ struct lock_file; void preload_index(struct index_state *index, |