#include "initfini.h"
#include "object_info.h"
void initfini_list_init(struct initfini_list_struct *initfini_list)
{
initfini_list->first = NULL;
initfini_list->last = NULL;
}
void initfini_list_push_back(struct initfini_list_struct *initfini_list, struct object_info_struct *object_info)
{
object_info->initfini_previous = initfini_list->last;
object_info->initfini_next = NULL;
if (initfini_list->last)
initfini_list->last->initfini_next = object_info;
else
initfini_list->first = object_info;
initfini_list->last = object_info;
}
struct object_info_struct *initfini_list_pop_front(struct initfini_list_struct *initfini_list)
{
struct object_info_struct *object_info;
if (initfini_list->first) {
object_info = initfini_list->first;
initfini_list->first = object_info->initfini_next;
if (object_info->initfini_next)
object_info->initfini_next->initfini_previous = NULL;
else
initfini_list->last = NULL;
return object_info;
}
else
return NULL;
}
void initfini_list_remove(struct initfini_list_struct *initfini_list, struct object_info_struct *object_info)
{
if (object_info->initfini_previous)
object_info->initfini_previous->initfini_next = object_info->initfini_next;
else
initfini_list->first = object_info->initfini_next;
if (object_info->initfini_next)
object_info->initfini_next->initfini_previous = object_info->initfini_previous;
else
initfini_list->last = object_info->initfini_previous;
}