src/llist.c: Compare data pointers if callback is NULL
If a NULL callback is passed to llist_find_*(), fall back to comparing data pointers. The check for a NULL callback pointer is done outside the main loop with an eye towards performance. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
This commit is contained in:
parent
b8b6830dfd
commit
e1fbee0071
39
src/llist.c
39
src/llist.c
@ -210,9 +210,16 @@ llist_item_t *llist_find_first(llist_t * l, void *data,
|
|||||||
{
|
{
|
||||||
llist_item_t *i;
|
llist_item_t *i;
|
||||||
|
|
||||||
for (i = l->head; i; i = i->next) {
|
if (fn_match) {
|
||||||
if (fn_match(i->data, data))
|
for (i = l->head; i; i = i->next) {
|
||||||
return i;
|
if (fn_match(i->data, data))
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (i = l->head; i; i = i->next) {
|
||||||
|
if (i->data == data)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -226,9 +233,16 @@ llist_item_t *llist_find_next(llist_item_t * i, void *data,
|
|||||||
{
|
{
|
||||||
if (i) {
|
if (i) {
|
||||||
i = i->next;
|
i = i->next;
|
||||||
for (; i; i = i->next) {
|
if (fn_match) {
|
||||||
if (fn_match(i->data, data))
|
for (; i; i = i->next) {
|
||||||
return i;
|
if (fn_match(i->data, data))
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (; i; i = i->next) {
|
||||||
|
if (i->data == data)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -246,9 +260,16 @@ llist_item_t *llist_find_nth(llist_t * l, int n, void *data,
|
|||||||
if (n < 0)
|
if (n < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
for (i = l->head; i; i = i->next) {
|
if (fn_match) {
|
||||||
if (fn_match(i->data, data) && (n-- == 0))
|
for (i = l->head; i; i = i->next) {
|
||||||
return i;
|
if (fn_match(i->data, data) && (n-- == 0))
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (i = l->head; i; i = i->next) {
|
||||||
|
if ((i->data == data) && (n-- == 0))
|
||||||
|
return i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user