summaryrefslogtreecommitdiffstats
path: root/libdimension/dimension
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@gmail.com>2010-05-01 15:55:00 -0600
committerTavian Barnes <tavianator@gmail.com>2010-05-01 15:55:00 -0600
commit4b61b9a2d67e8f011840c95d20deef096c2e51a3 (patch)
treee408c5bdd9fa288cb6ce74897a2df52d9abdedbe /libdimension/dimension
parentfa424d083234ce32b87d3527359d777bfdea0adc (diff)
downloaddimension-4b61b9a2d67e8f011840c95d20deef096c2e51a3.tar.xz
Fix list sorting.
Diffstat (limited to 'libdimension/dimension')
-rw-r--r--libdimension/dimension/list.h15
1 files changed, 8 insertions, 7 deletions
diff --git a/libdimension/dimension/list.h b/libdimension/dimension/list.h
index 8143e8b..0b68e91 100644
--- a/libdimension/dimension/list.h
+++ b/libdimension/dimension/list.h
@@ -133,9 +133,9 @@ dmnsn_list_set(dmnsn_list_iterator *i, const void *obj)
DMNSN_INLINE void
dmnsn_list_swap(dmnsn_list_iterator *a, dmnsn_list_iterator *b)
{
- dmnsn_list_iterator temp = *a;
- *a = *b;
- *b = temp;
+ void *temp = a->ptr;
+ a->ptr = b->ptr;
+ b->ptr = temp;
}
/* Insert `j' before `i' */
@@ -150,13 +150,12 @@ dmnsn_list_iterator_insert(dmnsn_list *list,
j->prev = i->prev;
i->prev = j;
} else {
- if (list->last) {
- j->prev = list->last;
- j->prev->next = j;
- }
+ j->prev = list->last;
list->last = j;
}
+ if (j->prev)
+ j->prev->next = j;
j->next = i;
++list->length;
}
@@ -183,6 +182,8 @@ dmnsn_list_iterator_remove(dmnsn_list *list, dmnsn_list_iterator *i)
i->prev->next = i->next;
if (i->next)
i->next->prev = i->prev;
+ i->prev = NULL;
+ i->next = NULL;
--list->length;
}