/* 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), \