/* Chopping \a vars down to one variable */
if (vars != NULL) {
struct ast_variable **p = vars;
- p++;
- var = *p;
- while (var) {
- ast_variables_destroy(var);
- p++;
+
+ /* Only take the first one. */
+ var = *vars;
+
+ /* Destroy the rest. */
+ while (*++p) {
+ ast_variables_destroy(*p);
}
- vars = ast_realloc(vars, sizeof(struct ast_variable *));
+ ast_free(vars);
}
- var = *vars;
-
return var;
}
}
ast_variables_destroy(base_var);
base_var = next;
} else {
+ /*!
+ * \todo XXX The interactions with base_var and append_var may
+ * cause a memory leak of base_var nodes. Also the append_var
+ * list and base_var list may get cross linked.
+ */
if (append_var) {
base_var->next = append_var;
} else {
if (vars) {
struct ast_variable *last_var = NULL;
struct ast_variable **p = vars;
+
+ /* Chain the vars array of lists into one list to return. */
while (*p) {
if (last_var) {
while (last_var->next) {