diff options
author | Thomas Haller <thaller@redhat.com> | 2023-03-10 19:18:37 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2023-03-21 15:58:38 +0100 |
commit | 78489e7cbb1edfc15f60faa15c7488fe40031c5c (patch) | |
tree | 760f0b552ac219e2ce7d575e8b6a9b7d2e9253db | |
parent | 46703557fb98836532fe372b657dc02d0560e8df (diff) |
glib-aux/prioq: refactor find_item() in NMPrioq
-rw-r--r-- | src/libnm-glib-aux/nm-prioq.c | 26 |
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 |