]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: array_idx_modifiable changed not to allocate space.
authorSergey Kitov <sergey.kitov@open-xchange.com>
Thu, 7 Dec 2017 09:34:57 +0000 (11:34 +0200)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Mon, 12 Mar 2018 07:46:46 +0000 (09:46 +0200)
src/lib/array.c
src/lib/array.h

index dc5d76d9f24574eea4a29dbc45f22028aeb11f5a..5817e423d418ff1bb155f0615e27188a2d854025 100644 (file)
@@ -4,7 +4,14 @@
 #include "array.h"
 
 
-void *array_idx_modifiable_i(struct array *array, unsigned int idx)
+void *
+array_idx_modifiable_i(const struct array *array, unsigned int idx)
+{
+       i_assert(idx * array->element_size < array->buffer->used);
+       return PTR_OFFSET(array->buffer->data, idx * array->element_size);
+}
+
+void *array_idx_get_space_i(struct array *array, unsigned int idx)
 {
        return buffer_get_space_unsafe(array->buffer, idx * array->element_size,
                                       array->element_size);
index 49dc445f77ada14a22dd773cb208b51a94df07ff..3a0e179801f16e0216693da113abe963a4af7eb2 100644 (file)
@@ -247,12 +247,16 @@ array_get_modifiable_i(struct array *array, unsigned int *count_r)
        ARRAY_TYPE_CAST_MODIFIABLE(array) \
                array_get_modifiable_i(&(array)->arr, count)
 
-void *array_idx_modifiable_i(struct array *array, unsigned int idx);
+void *
+array_idx_modifiable_i(const struct array *array, unsigned int idx) ATTR_PURE;
 #define array_idx_modifiable(array, idx) \
        ARRAY_TYPE_CAST_MODIFIABLE(array) \
                array_idx_modifiable_i(&(array)->arr, idx)
 
-#define array_idx_get_space(array, idx) array_idx_modifiable(array, idx)
+void *array_idx_get_space_i(struct array *array, unsigned int idx);
+#define array_idx_get_space(array, idx) \
+       ARRAY_TYPE_CAST_MODIFIABLE(array) \
+               array_idx_get_space_i(&(array)->arr, idx)
 
 void array_idx_set_i(struct array *array, unsigned int idx, const void *data);
 #define array_idx_set(array, idx, data) \