diff --git a/include/asterisk/vector.h b/include/asterisk/vector.h index 8f5cf8c8b03011d0315cef8d1c3619b84c135528..00d701bf0f87f7bd88dcc1be29f49781ee5e4474 100644 --- a/include/asterisk/vector.h +++ b/include/asterisk/vector.h @@ -637,24 +637,28 @@ int ast_vector_string_split(struct ast_vector_string *dest, * \return 0 on success. * \return Non-zero on failure. */ -#define AST_VECTOR_COMPACT(vec) ({ \ - int res = 0; \ - do { \ - if ((vec)->max > (vec)->current) { \ - size_t new_max = (vec)->current; \ - typeof((vec)->elems) new_elems = ast_realloc( \ - (vec)->elems, \ - new_max * sizeof(*new_elems)); \ - if (new_elems || (vec)->current == 0) { \ - (vec)->elems = new_elems; \ - (vec)->max = new_max; \ - } else { \ - res = -1; \ - break; \ - } \ - } \ - } while(0); \ - res; \ +#define AST_VECTOR_COMPACT(vec) ({ \ + int res = 0; \ + do { \ + size_t new_max = (vec)->current; \ + if (new_max == 0) { \ + ast_free((vec)->elems); \ + (vec)->elems = NULL; \ + (vec)->max = 0; \ + } else if ((vec)->max > new_max) { \ + typeof((vec)->elems) new_elems = ast_realloc( \ + (vec)->elems, \ + new_max * sizeof(*new_elems)); \ + if (new_elems) { \ + (vec)->elems = new_elems; \ + (vec)->max = new_max; \ + } else { \ + res = -1; \ + break; \ + } \ + } \ + } while(0); \ + res; \ }) /*!