about summary refs log tree commit diff stats
path: root/src/addr_list.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/addr_list.c')
-rw-r--r--src/addr_list.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/addr_list.c b/src/addr_list.c index 759907e..e8ba571 100644 --- a/src/addr_list.c +++ b/src/addr_list.c
@@ -9,7 +9,7 @@ void addr_list_init(struct addr_list* list) {
9 list->top = NULL; 9 list->top = NULL;
10} 10}
11 11
12void addr_list_add(struct addr_list* list, unsigned char addr[6]) { 12void addr_list_add(struct addr_list* list, unsigned char addr[6], void* userdata) {
13 struct addr_list_node* cur = list->top; 13 struct addr_list_node* cur = list->top;
14 struct addr_list_node* prev = NULL; 14 struct addr_list_node* prev = NULL;
15 15
@@ -25,6 +25,7 @@ void addr_list_add(struct addr_list* list, unsigned char addr[6]) {
25 struct addr_list_node* next = (struct addr_list_node*)malloc(sizeof(struct addr_list_node)); 25 struct addr_list_node* next = (struct addr_list_node*)malloc(sizeof(struct addr_list_node));
26 next->next = NULL; 26 next->next = NULL;
27 memcpy(next->value, addr, 6); 27 memcpy(next->value, addr, 6);
28 next->userdata = userdata;
28 29
29 if (prev == NULL) { 30 if (prev == NULL) {
30 list->top = next; 31 list->top = next;
@@ -47,6 +48,20 @@ bool addr_list_contains(struct addr_list* list, unsigned char addr[6]) {
47 return false; 48 return false;
48} 49}
49 50
51void* addr_list_get(struct addr_list* list, unsigned char addr[6]) {
52 struct addr_list_node* cur = list->top;
53
54 while (cur != NULL) {
55 if (!strncmp(cur->value, addr, 6)) {
56 return cur->userdata;
57 }
58
59 cur = cur->next;
60 }
61
62 return NULL;
63}
64
50void addr_list_remove(struct addr_list* list, unsigned char addr[6]) { 65void addr_list_remove(struct addr_list* list, unsigned char addr[6]) {
51 struct addr_list_node* cur = list->top; 66 struct addr_list_node* cur = list->top;
52 struct addr_list_node* prev = NULL; 67 struct addr_list_node* prev = NULL;