static struct ao2_container *cli_contact_get_container(const char *regex) { RAII_VAR(struct ao2_container *, parent_container, NULL, ao2_cleanup); struct ao2_container *child_container; regex_t regexbuf; parent_container = cli_aor_get_container(""); if (!parent_container) { return NULL; } child_container = ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_NOLOCK, 0, cli_contact_sort, cli_contact_compare); if (!child_container) { return NULL; } ao2_callback(parent_container, OBJ_NODATA, cli_aor_gather_contacts, child_container); if (!ast_strlen_zero(regex)) { if (regcomp(®exbuf, regex, REG_EXTENDED | REG_NOSUB)) { ao2_ref(child_container, -1); return NULL; } ao2_callback(child_container, OBJ_UNLINK | OBJ_MULTIPLE | OBJ_NODATA, cli_filter_contacts, ®exbuf); regfree(®exbuf); } return child_container; }
static struct ao2_container *cli_contact_get_container(void) { RAII_VAR(struct ao2_container *, parent_container, NULL, ao2_cleanup); struct ao2_container *child_container; parent_container = cli_aor_get_container(); if (!parent_container) { return NULL; } child_container = ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_NOLOCK, 0, cli_contact_sort, cli_contact_compare); if (!child_container) { return NULL; } ao2_callback(parent_container, OBJ_NODATA, cli_aor_gather_contacts, child_container); return child_container; }