-
-void *
-_arr_resize (void *elts, int nelts, size_t eltsize)
-{
- _arr_descr *dp = _ARR_DESCR (elts);
- int n;
-
- assert ((dp->cookie == ARR_F_MAGIC) && (nelts >= 0));
- ARR_VRFY (elts);
- assert (dp->eltsize ? dp->eltsize == eltsize : (dp->eltsize = eltsize, 1));
-
- /* @@@ lots of resizes for small nelts */
- n = MAX (1, dp->u.allocated);
- while (nelts > n) n <<= 1;
- while (3*nelts < n) n >>= 1;
- assert (n >= nelts);
-
- if (n != dp->u.allocated) {
- dp = xrealloc (dp, _ARR_ELTS_OFFS+eltsize*n);
- dp->u.allocated = n;
+/**
+ * Resize a flexible array, allocate more data if needed but do NOT
+ * reduce.
+ *
+ * @param elts The flexible array (pointer to the first element).
+ * @param nelts The new number of elements.
+ * @param eltsize The size of the array elements.
+ *
+ * @return A resized flexible array, possibly other address than
+ * elts.
+ *
+ * @remark Helper function, use ARR_RESIZE() instead.
+ */
+void *_arr_resize(void *elts, int nelts, size_t eltsize) {
+ _arr_descr *dp = _ARR_DESCR(elts);
+ int n;
+
+ assert((dp->magic == ARR_F_MAGIC) && (nelts >= 0));
+ ARR_VRFY(elts);
+ assert(dp->eltsize ? dp->eltsize == eltsize : (dp->eltsize = eltsize, 1));
+
+ /* @@@ lots of resizes for small nelts */
+ n = MAX(1, dp->u.allocated);
+ while (nelts > n) n <<= 1;
+ while (3*nelts < n) n >>= 1;
+ assert(n >= nelts);
+
+ if (n != dp->u.allocated) {
+ dp = xrealloc(dp, _ARR_ELTS_OFFS+eltsize*n);
+ dp->u.allocated = n;