#include "lac_mem.h"
#include "lac_list.h"
CpaStatus
SalList_add(sal_list_t **list, sal_list_t **tail, void *pObj)
{
sal_list_t *new_element = NULL;
if (NULL == *list) {
*list = malloc(sizeof(sal_list_t), M_QAT, M_WAITOK);
(*list)->next = NULL;
(*list)->pObj = pObj;
*tail = *list;
} else {
new_element = malloc(sizeof(sal_list_t), M_QAT, M_WAITOK);
new_element->pObj = pObj;
new_element->next = NULL;
(*tail)->next = new_element;
*tail = new_element;
}
return CPA_STATUS_SUCCESS;
}
void *
SalList_getObject(sal_list_t *list)
{
if (list == NULL) {
return NULL;
}
return list->pObj;
}
void
SalList_delObject(sal_list_t **list)
{
if (*list == NULL) {
return;
}
(*list)->pObj = NULL;
return;
}
void *
SalList_next(sal_list_t *list)
{
return list->next;
}
void
SalList_free(sal_list_t **list)
{
sal_list_t *next_element = NULL;
void *pObj = NULL;
while (NULL != (*list)) {
next_element = SalList_next(*list);
pObj = SalList_getObject((*list));
LAC_OS_FREE(pObj);
LAC_OS_FREE(*list);
*list = next_element;
}
}
void
SalList_del(sal_list_t **head_list, sal_list_t **pre_list, sal_list_t *list)
{
void *pObj = NULL;
if ((NULL == *head_list) || (NULL == *pre_list) || (NULL == list)) {
return;
}
if (*head_list == list) {
*head_list = list->next;
} else {
(*pre_list)->next = list->next;
}
pObj = SalList_getObject(list);
LAC_OS_FREE(pObj);
LAC_OS_FREE(list);
return;
}