summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorticktock35 <ticktock35@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>2008-12-15 00:32:47 (EST)
committer ticktock35 <ticktock35@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>2008-12-15 00:32:47 (EST)
commite91e75dcb824cdc22799b1eb15395d065b4d9518 (patch)
tree360954ba537c302a1420b347f1d571dc7c666fa1
parent014e4c306c4765c65abf1f2ce879bebcdd8c7261 (diff)
opkg: implment active_list_clear()
git-svn-id: http://opkg.googlecode.com/svn/trunk@170 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358
-rw-r--r--libopkg/active_list.c15
-rw-r--r--tests/opkg_active_list_test.c3
2 files changed, 17 insertions, 1 deletions
diff --git a/libopkg/active_list.c b/libopkg/active_list.c
index e297cfc..8544440 100644
--- a/libopkg/active_list.c
+++ b/libopkg/active_list.c
@@ -71,7 +71,22 @@ struct active_list * active_list_prev(struct active_list *head, struct active_li
return prev;
}
+static void list_head_clear (struct list_head *head) {
+ struct active_list *next;
+ struct list_head *n, *ptr;
+ if (!head)
+ return;
+ list_for_each_safe(ptr, n , head) {
+ next = list_entry(ptr, struct active_list, node);
+ if (next->depend.next != &next->depend) {
+ list_head_clear(&next->depend);
+ }
+ list_del_init(&next->node);
+ next->depended = NULL;
+ }
+}
void active_list_clear(struct active_list *head) {
+ list_head_clear(&head->node);
}
void active_list_add_depend(struct active_list *node, struct active_list *depend) {
diff --git a/tests/opkg_active_list_test.c b/tests/opkg_active_list_test.c
index 1e21645..77819b0 100644
--- a/tests/opkg_active_list_test.c
+++ b/tests/opkg_active_list_test.c
@@ -111,7 +111,8 @@ int main (void) {
test = list_entry(ptr, struct active_test, list);
printf ("%s ",test->str);
}
- printf("\npos order: ");
+ printf("\nafter clear: ");
+ active_list_clear(&head);
for(ptr = active_list_next(&head, NULL); ptr ;ptr = active_list_next(&head, ptr)) {
test = list_entry(ptr, struct active_test, list);
printf ("%s ",test->str);