summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2023-03-10 19:18:37 +0100
committerThomas Haller <thaller@redhat.com>2023-03-21 15:58:38 +0100
commit78489e7cbb1edfc15f60faa15c7488fe40031c5c (patch)
tree760f0b552ac219e2ce7d575e8b6a9b7d2e9253db
parent46703557fb98836532fe372b657dc02d0560e8df (diff)
glib-aux/prioq: refactor find_item() in NMPrioq
-rw-r--r--src/libnm-glib-aux/nm-prioq.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/libnm-glib-aux/nm-prioq.c b/src/libnm-glib-aux/nm-prioq.c
index f5bc606854..c53e74fc1c 100644
--- a/src/libnm-glib-aux/nm-prioq.c
+++ b/src/libnm-glib-aux/nm-prioq.c
@@ -278,24 +278,26 @@ find_item(NMPrioq *q, void *data, unsigned *idx)
_nm_assert_q(q);
- if (q->_priv.n_items <= 0)
- return NULL;
-
- if (idx) {
- if (*idx == NM_PRIOQ_IDX_NULL || *idx >= q->_priv.n_items)
- return NULL;
-
- i = &q->_priv.items[*idx];
- if (i->data == data)
- return i;
- } else {
+ if (G_UNLIKELY(!idx)) {
+ /* We allow using NMPrioq without "idx". In that case, it does a linear
+ * search for the data. */
for (i = q->_priv.items; i < &q->_priv.items[q->_priv.n_items]; i++) {
if (i->data == data)
return i;
}
+ return NULL;
}
- return NULL;
+ if (*idx >= q->_priv.n_items) {
+ return NULL;
+ }
+
+ i = &q->_priv.items[*idx];
+
+ if (i->data != data)
+ return NULL;
+
+ return i;
}
gboolean