chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
missing: if RLIMIT_RTTIME is not defined by the libc, then we need a new define for...
[elogind.git]
/
src
/
shared
/
prioq.c
diff --git
a/src/shared/prioq.c
b/src/shared/prioq.c
index fe91324d9b5790e9d93ebff317ef714eef4c9fd9..8af4c51c2f751336e2822a44a1c12e2257960761 100644
(file)
--- a/
src/shared/prioq.c
+++ b/
src/shared/prioq.c
@@
-53,6
+53,19
@@
void prioq_free(Prioq *q) {
free(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;
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;
unsigned n;
struct prioq_item *j;
- n = MAX((q->n_items+1) * 2, 16);
+ n = MAX((q->n_items+1) * 2, 16
u
);
j = realloc(q->items, sizeof(struct prioq_item) * n);
if (!j)
return -ENOMEM;
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) {
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;
i = q->items + *idx;
- assert(i->data == data);
+ if (i->data != data)
+ return NULL;
return i;
} else {
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;
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)
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) {
}
void *prioq_peek(Prioq *q) {
- assert(q);
+
+ if (!q)
+ return NULL;
if (q->n_items <= 0)
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;
void *prioq_pop(Prioq *q) {
void *data;
- assert(q);
+ if (!q)
+ return NULL;
if (q->n_items <= 0)
return NULL;
if (q->n_items <= 0)
return NULL;
@@
-269,13
+290,17
@@
void *prioq_pop(Prioq *q) {
}
unsigned prioq_size(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) {
bool prioq_isempty(Prioq *q) {
- assert(q);
+
+ if (!q)
+ return true;
return q->n_items <= 0;
}
return q->n_items <= 0;
}