summaryrefslogtreecommitdiff
path: root/textproc/iiimf-server/files/patch-iiimsf_src_lexmlconf.cpp
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;