blob: ad0fb280089c66c71f4000a717906a5ae743045e (
plain) (
blame)
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
|
--- iiimsf/src/lexmlconf.cpp.orig Fri Apr 22 16:53:03 2005
+++ iiimsf/src/lexmlconf.cpp Mon May 16 19:00:55 2005
@@ -114,6 +114,7 @@
list = (IIIMLEInfoList *)malloc(sizeof (IIIMLEInfoList) * 1);
list->data = leinfo;
list->next = NULL;
+ list->prev = NULL;
return list;
}
@@ -128,6 +129,7 @@
if (list != NULL) {
for (ll = list; ll->next != NULL; ll = ll->next);
ll->next = l;
+ l->prev = ll;
ll = list;
} else {
ll = l;
@@ -144,7 +146,12 @@
l = iiim_le_info_list_new(leinfo);
if (list != NULL) {
+ if (list->prev != NULL) {
+ list->prev->next = l;
+ }
l->next = list;
+ l->prev = list->prev;
+ list->prev = l;
}
return l;
@@ -154,22 +161,19 @@
iiim_le_info_list_remove(IIIMLEInfoList *list,
IIIMLEInfo *leinfo)
{
- IIIMLEInfoList *tmp, *prev = NULL;
+ IIIMLEInfoList *prev, *next;
- tmp = list;
- while (tmp) {
- if (tmp->data == leinfo) {
- if (prev)
- prev->next = tmp->next;
- else
- list = tmp->next;
- iiim_le_info_free(tmp->data);
- free(tmp);
-
- break;
- }
- prev = tmp;
- tmp = prev->next;
+ for (; list && list->data != leinfo; list = list->next);
+
+ if (NULL != list) {
+ prev = list->prev;
+ next = list->next;
+
+ if (NULL != prev) prev->next = next;
+ if (NULL != next) next->prev = prev;
+
+ if (list->data) iiim_le_info_free(list->data);
+ free(list);
}
return list;
|