]> git.ipfire.org Git - thirdparty/git.git/commitdiff
git-compat-util: introduce MEMZERO_ARRAY() macro
authorToon Claes <toon@iotcl.com>
Wed, 10 Dec 2025 13:13:01 +0000 (14:13 +0100)
committerJunio C Hamano <gitster@pobox.com>
Thu, 11 Dec 2025 05:44:43 +0000 (14:44 +0900)
Introduce a new macro MEMZERO_ARRAY() that zeroes the memory allocated
by ALLOC_ARRAY() and friends. And add coccinelle rule to enforce the use
of this macro.

Signed-off-by: Toon Claes <toon@iotcl.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/last-modified.c
compat/simple-ipc/ipc-win32.c
contrib/coccinelle/array.cocci
diff-delta.c
ewah/bitmap.c
git-compat-util.h
hashmap.c
pack-revindex.c

index cc5fd2e7950be746443faae831c36aa9fd09e0d5..ac5387e861fd88d5e050a78b3c53e0609d266502 100644 (file)
@@ -327,7 +327,7 @@ static void process_parent(struct last_modified *lm,
        if (!(parent->object.flags & PARENT1))
                active_paths_free(lm, parent);
 
-       memset(lm->scratch->words, 0x0, lm->scratch->word_alloc * sizeof(eword_t));
+       MEMZERO_ARRAY(lm->scratch->words, lm->scratch->word_alloc);
        diff_queue_clear(&diff_queued_diff);
 }
 
index a8fc812adfcbd37d0530eb1f4efc32c886d1e0a2..4a3e7df9c739e16298c53e8c26c84a0285170e44 100644 (file)
@@ -686,7 +686,7 @@ static LPSECURITY_ATTRIBUTES get_sa(struct my_sa_data *d)
                goto fail;
        }
 
-       memset(ea, 0, NR_EA * sizeof(EXPLICIT_ACCESS));
+       MEMZERO_ARRAY(ea, NR_EA);
 
        ea[0].grfAccessPermissions = GENERIC_READ | GENERIC_WRITE;
        ea[0].grfAccessMode = SET_ACCESS;
index 27a3b479c94e5cb42817c3d2bd1fff6f270ef583..d306f6a21efc9e255360e5ec390c8f53dc42532a 100644 (file)
@@ -101,3 +101,23 @@ expression dst, src, n;
 -ALLOC_ARRAY(dst, n);
 -COPY_ARRAY(dst, src, n);
 +DUP_ARRAY(dst, src, n);
+
+@@
+type T;
+T *ptr;
+expression n;
+@@
+- memset(ptr, \( 0x0 \| 0 \), n * \( sizeof(T)
+-                                 \| sizeof(*ptr)
+-                                 \) )
++ MEMZERO_ARRAY(ptr, n)
+
+@@
+type T;
+T[] ptr;
+expression n;
+@@
+- memset(ptr, \( 0x0 \| 0 \), n * \( sizeof(T)
+-                                 \| sizeof(*ptr)
+-                                 \) )
++ MEMZERO_ARRAY(ptr, n)
index 71d37368d68a18eff4b17ee24ab69c2ec9781acf..43c339f01061ca83e3273061fbe9fd621125b153 100644 (file)
@@ -171,7 +171,7 @@ struct delta_index * create_delta_index(const void *buf, unsigned long bufsize)
        mem = hash + hsize;
        entry = mem;
 
-       memset(hash, 0, hsize * sizeof(*hash));
+       MEMZERO_ARRAY(hash, hsize);
 
        /* allocate an array to count hash entries */
        hash_count = calloc(hsize, sizeof(*hash_count));
index 55928dada86a37f3dd291c775f7f109f908e74a4..bf878bf8768ea0050593a8e0311fe04d87db1415 100644 (file)
@@ -46,8 +46,7 @@ static void bitmap_grow(struct bitmap *self, size_t word_alloc)
 {
        size_t old_size = self->word_alloc;
        ALLOC_GROW(self->words, word_alloc, self->word_alloc);
-       memset(self->words + old_size, 0x0,
-              (self->word_alloc - old_size) * sizeof(eword_t));
+       MEMZERO_ARRAY(self->words + old_size, (self->word_alloc - old_size));
 }
 
 void bitmap_set(struct bitmap *self, size_t pos)
@@ -192,8 +191,8 @@ void bitmap_or_ewah(struct bitmap *self, struct ewah_bitmap *other)
        if (self->word_alloc < other_final) {
                self->word_alloc = other_final;
                REALLOC_ARRAY(self->words, self->word_alloc);
-               memset(self->words + original_size, 0x0,
-                       (self->word_alloc - original_size) * sizeof(eword_t));
+               MEMZERO_ARRAY(self->words + original_size,
+                             (self->word_alloc - original_size));
        }
 
        ewah_iterator_init(&it, other);
index 398e0fac4fab6007903fdd9fd31dcc28fe531a65..2b8192fd2e22fbc13b67754bb1aff3b801c010ef 100644 (file)
@@ -726,6 +726,7 @@ static inline uint64_t u64_add(uint64_t a, uint64_t b)
 #define ALLOC_ARRAY(x, alloc) (x) = xmalloc(st_mult(sizeof(*(x)), (alloc)))
 #define CALLOC_ARRAY(x, alloc) (x) = xcalloc((alloc), sizeof(*(x)))
 #define REALLOC_ARRAY(x, alloc) (x) = xrealloc((x), st_mult(sizeof(*(x)), (alloc)))
+#define MEMZERO_ARRAY(x, alloc) memset((x), 0x0, st_mult(sizeof(*(x)), (alloc)))
 
 #define COPY_ARRAY(dst, src, n) copy_array((dst), (src), (n), sizeof(*(dst)) + \
        BARF_UNLESS_COPYABLE((dst), (src)))
index a711377853f18504f6733017977d8953141ec87f..3b5d6f14bc93fb0c60cea085102ef2075ab1d6f3 100644 (file)
--- a/hashmap.c
+++ b/hashmap.c
@@ -194,7 +194,7 @@ void hashmap_partial_clear_(struct hashmap *map, ssize_t entry_offset)
                return;
        if (entry_offset >= 0)  /* called by hashmap_clear_entries */
                free_individual_entries(map, entry_offset);
-       memset(map->table, 0, map->tablesize * sizeof(struct hashmap_entry *));
+       MEMZERO_ARRAY(map->table, map->tablesize);
        map->shrink_at = 0;
        map->private_size = 0;
 }
index d0791cc4938fa2c784a1a585210552ee2c6d06fa..8598b941c8c4191397094eaa852d68cdd7997d05 100644 (file)
@@ -75,7 +75,7 @@ static void sort_revindex(struct revindex_entry *entries, unsigned n, off_t max)
        for (bits = 0; max >> bits; bits += DIGIT_SIZE) {
                unsigned i;
 
-               memset(pos, 0, BUCKETS * sizeof(*pos));
+               MEMZERO_ARRAY(pos, BUCKETS);
 
                /*
                 * We want pos[i] to store the index of the last element that