#include "addr_list.h" #include #include #include #include void addr_list_init(struct addr_list* list) { list->top = NULL; } void addr_list_add(struct addr_list* list, unsigned char addr[6], void* userdata) { struct addr_list_node* cur = list->top; struct addr_list_node* prev = NULL; while (cur != NULL) { if (!strncmp(cur->value, addr, 6)) { return; } prev = cur; cur = cur->next; } struct addr_list_node* next = (struct addr_list_node*)malloc(sizeof(struct addr_list_node)); next->next = NULL; memcpy(next->value, addr, 6); next->userdata = userdata; if (prev == NULL) { list->top = next; } else { prev->next = next; } } bool addr_list_contains(struct addr_list* list, unsigned char addr[6]) { struct addr_list_node* cur = list->top; while (cur != NULL) { if (!strncmp(cur->value, addr, 6)) { return true; } cur = cur->next; } return false; } void* addr_list_get(struct addr_list* list, unsigned char addr[6]) { struct addr_list_node* cur = list->top; while (cur != NULL) { if (!strncmp(cur->value, addr, 6)) { return cur->userdata; } cur = cur->next; } return NULL; } void addr_list_remove(struct addr_list* list, unsigned char addr[6]) { struct addr_list_node* cur = list->top; struct addr_list_node* prev = NULL; if (cur == NULL) { return; } while (cur != NULL) { if (!strncmp(cur->value, addr, 6)) { break; } prev = cur; cur = cur->next; if (cur == NULL) { return; } } if (prev == NULL) { list->top = cur->next; } else { prev->next = cur->next; } free(cur); } void addr_list_free(struct addr_list* list) { struct addr_list_node* cur = list->top; while (cur != NULL) { struct addr_list_node* next = cur->next; free(cur); cur = next; } list->top = NULL; }