Skip to content

Commit d2ec87a

Browse files
rscharfegitster
authored andcommitted
add DUP_ARRAY
Add a macro for allocating and populating a shallow copy of an array. It is intended to replace a sequence like this: ALLOC_ARRAY(dst, n); COPY_ARRAY(dst, src, n); With the less repetitve: DUP_ARRAY(dst, src, n); It checks whether the types of source and destination are compatible to ensure the copy can be used safely. An easier alternative would be to only consider the source and return a void pointer, that could be used like this: dst = ARRAY_DUP(src, n); That would be more versatile, as it could be used in declarations as well. Making it type-safe would require the use of typeof_unqual from C23, though. So use the safe and compatible variant for now. Signed-off-by: René Scharfe <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 08e8c26 commit d2ec87a

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

git-compat-util.h

+5
Original file line numberDiff line numberDiff line change
@@ -1115,6 +1115,11 @@ static inline void move_array(void *dst, const void *src, size_t n, size_t size)
11151115
memmove(dst, src, st_mult(size, n));
11161116
}
11171117

1118+
#define DUP_ARRAY(dst, src, n) do { \
1119+
size_t dup_array_n_ = (n); \
1120+
COPY_ARRAY(ALLOC_ARRAY((dst), dup_array_n_), (src), dup_array_n_); \
1121+
} while (0)
1122+
11181123
/*
11191124
* These functions help you allocate structs with flex arrays, and copy
11201125
* the data directly into the array. For example, if you had:

0 commit comments

Comments
 (0)