From fdc468280e23ddd3a91a0539e7a48ba9c8a60d27 Mon Sep 17 00:00:00 2001 From: Phil Carmody Date: Mon, 15 Jun 2015 14:25:07 +0300 Subject: [PATCH] lib: array - permit array_swap with uninitialised arrays Before initialisation, all fields are blank, so the element_size field is not the actual size, and the i_assert would fire. Signed-off-by: Phil Carmody --- src/lib/array.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/lib/array.h b/src/lib/array.h index dda377936a..7065a02a3d 100644 --- a/src/lib/array.h +++ b/src/lib/array.h @@ -278,15 +278,18 @@ array_copy(struct array *dest, unsigned int dest_idx, /* Exchange ownership of two arrays, which should have been allocated from the same pool/context. Useful for updating an array with a - replacement. */ + replacement. Can also do it with uninitialised arrays (which will + have .element_size == 0). */ static inline void array_swap_i(struct array *array1, struct array *array2) { buffer_t *buffer = array1->buffer; + size_t elsize = array1->element_size; - i_assert(array1->element_size == array2->element_size); array1->buffer = array2->buffer; + array1->element_size = array2->element_size; array2->buffer = buffer; + array2->element_size = elsize; } #define array_swap(array1, array2) \ array_swap_i(&(array1)->arr + ARRAY_TYPES_CHECK(array1, array2), \ -- 2.47.3