chiark / gitweb /
Get rid of some more unused defines and dirs
[elogind.git] / src / shared / prioq.c
index fe91324d9b5790e9d93ebff317ef714eef4c9fd9..8af4c51c2f751336e2822a44a1c12e2257960761 100644 (file)
@@ -53,6 +53,19 @@ void prioq_free(Prioq *q) {
         free(q);
 }
 
+int prioq_ensure_allocated(Prioq **q, compare_func_t compare_func) {
+        assert(q);
+
+        if (*q)
+                return 0;
+
+        *q = prioq_new(compare_func);
+        if (!*q)
+                return -ENOMEM;
+
+        return 0;
+}
+
 static void swap(Prioq *q, unsigned j, unsigned k) {
         void *saved_data;
         unsigned *saved_idx;
@@ -146,7 +159,7 @@ int prioq_put(Prioq *q, void *data, unsigned *idx) {
                 unsigned n;
                 struct prioq_item *j;
 
-                n = MAX((q->n_items+1) * 2, 16);
+                n = MAX((q->n_items+1) * 2, 16u);
                 j = realloc(q->items, sizeof(struct prioq_item) * n);
                 if (!j)
                         return -ENOMEM;
@@ -198,15 +211,19 @@ static void remove_item(Prioq *q, struct prioq_item *i) {
         }
 }
 
-static struct prioq_item* find_item(Prioq *q, void *data, unsigned *idx) {
+_pure_ static struct prioq_item* find_item(Prioq *q, void *data, unsigned *idx) {
         struct prioq_item *i;
 
         assert(q);
 
         if (idx) {
-                assert(*idx < q->n_items);
+                if (*idx == PRIOQ_IDX_NULL ||
+                    *idx > q->n_items)
+                        return NULL;
+
                 i = q->items + *idx;
-                assert(i->data == data);
+                if (i->data != data)
+                        return NULL;
 
                 return i;
         } else {
@@ -220,7 +237,8 @@ static struct prioq_item* find_item(Prioq *q, void *data, unsigned *idx) {
 int prioq_remove(Prioq *q, void *data, unsigned *idx) {
         struct prioq_item *i;
 
-        assert(q);
+        if (!q)
+                return 0;
 
         i = find_item(q, data, idx);
         if (!i)
@@ -247,7 +265,9 @@ int prioq_reshuffle(Prioq *q, void *data, unsigned *idx) {
 }
 
 void *prioq_peek(Prioq *q) {
-        assert(q);
+
+        if (!q)
+                return NULL;
 
         if (q->n_items <= 0)
                 return NULL;
@@ -258,7 +278,8 @@ void *prioq_peek(Prioq *q) {
 void *prioq_pop(Prioq *q) {
         void *data;
 
-        assert(q);
+        if (!q)
+                return NULL;
 
         if (q->n_items <= 0)
                 return NULL;
@@ -269,13 +290,17 @@ void *prioq_pop(Prioq *q) {
 }
 
 unsigned prioq_size(Prioq *q) {
-        assert(q);
 
-        return q->n_items;
+        if (!q)
+                return 0;
 
+        return q->n_items;
 }
+
 bool prioq_isempty(Prioq *q) {
-        assert(q);
+
+        if (!q)
+                return true;
 
         return q->n_items <= 0;
 }