}
if (likely (len < allocated))
return &array[len++];
+
/* Need to reallocate */
unsigned int new_allocated = allocated + (allocated >> 1) + 8;
- Type *new_array;
+ Type *new_array = NULL;
+
if (array == static_array) {
new_array = (Type *) calloc (new_allocated, sizeof (Type));
- if (new_array) {
+ if (new_array)
memcpy (new_array, array, len * sizeof (Type));
- array = new_array;
- }
} else {
bool overflows = (new_allocated < allocated) || _hb_unsigned_int_mul_overflows (new_allocated, sizeof (Type));
- if (unlikely (overflows))
- new_array = NULL;
- else
+ if (likely (!overflows)) {
new_array = (Type *) realloc (array, new_allocated * sizeof (Type));
- if (new_array) {
- free (array);
- array = new_array;
}
}
- if ((len < allocated))
- return &array[len++];
- else
+
+ if (unlikely (!new_array))
return NULL;
+
+ array = new_array;
+ allocated = new_allocated;
+ return &array[len++];
}
inline void pop (void)