-
Notifications
You must be signed in to change notification settings - Fork 0
/
list.c
104 lines (86 loc) · 2.44 KB
/
list.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
* qnap-finder
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "list.h"
LIST * create_list(void)
{
LIST *list;
list = (LIST *)malloc(sizeof(LIST));
if (list) {
list->first = NULL;
list->last = NULL;
list->num_entries = 0;
}
return list;
}
void free_list(LIST *list)
{
if (list) {
NODE *tmp, *prev;
tmp = list->first;
while (tmp != NULL) {
prev = tmp;
tmp = tmp->next;
if (prev->hostip)
free(prev->hostip);
if (prev->msg)
free(prev->msg);
free(prev);
}
free(tmp);
list->first = NULL;
list->last = NULL;
free(list);
}
}
NODE * create_node(void)
{
NODE *node;
node = (NODE *)malloc(sizeof(NODE));
if (node) {
node->len = 0;
node->hostip = NULL;
node->msg = NULL;
node->next = NULL;
}
return node;
}
int add_node(LIST *list, NODE *new)
{
int ret;
if (!list || !new) {
ret = -1;
goto end;
}
if (list->first == list->last &&
list->last == NULL) {
list->first = list->last = new;
list->first->next = NULL;
list->last->next = NULL;
} else {
list->last->next = new;
list->last = new;
list->last->next = NULL;
}
list->num_entries += 1;
ret = 0;
end:
return ret;
}