aboutsummaryrefslogtreecommitdiff
path: root/include/wlr/util
diff options
context:
space:
mode:
authorCalvin Lee <cyrus296@gmail.com>2017-08-16 09:23:21 +0200
committerCalvin Lee <cyrus296@gmail.com>2017-08-16 09:23:21 +0200
commit901c14c409e6e8143ade06a7478241e558cfb79c (patch)
tree8e83344aeadb70c3449baa663d02d7013c542d62 /include/wlr/util
parent19d6442f52743d50d10c796d7146f58c251f67fe (diff)
Prevent alloc errors from crashing in `list_t`
This commit changes the `list_t` api so that alloc errors can be detected and worked around. Also fixes errors not found in 5cc7342
Diffstat (limited to 'include/wlr/util')
-rw-r--r--include/wlr/util/list.h37
1 files changed, 33 insertions, 4 deletions
diff --git a/include/wlr/util/list.h b/include/wlr/util/list.h
index 0c175132..6e746ec4 100644
--- a/include/wlr/util/list.h
+++ b/include/wlr/util/list.h
@@ -9,16 +9,45 @@ typedef struct {
void **items;
} list_t;
+/**
+ * Creates a new list, may return `NULL` on failure
+ */
list_t *list_create(void);
void list_free(list_t *list);
void list_foreach(list_t *list, void (*callback)(void *item));
-void list_add(list_t *list, void *item);
-void list_push(list_t *list, void *item);
-void list_insert(list_t *list, size_t index, void *item);
+/**
+ * Add `item` to the end of a list.
+ * Returns: new list length or `-1` on failure
+ */
+int list_add(list_t *list, void *item);
+/**
+ * Add `item` to the end of a list.
+ * Returns: new list length or `-1` on failure
+ */
+int list_push(list_t *list, void *item);
+/**
+ * Place `item` into index `index` in the list
+ * Returns: new list length or `-1` on failure
+ */
+int list_insert(list_t *list, size_t index, void *item);
+/**
+ * Remove an item from the list
+ */
void list_del(list_t *list, size_t index);
+/**
+ * Remove and return an item from the end of the list
+ */
void *list_pop(list_t *list);
+/**
+ * Get a reference to the last item of a list without removal
+ */
void *list_peek(list_t *list);
-void list_cat(list_t *list, list_t *source);
+/**
+ * Append each item in `source` to `list`
+ * Does not modify `source`
+ * Returns: new list length or `-1` on failure
+ */
+int list_cat(list_t *list, list_t *source);
// See qsort. Remember to use *_qsort functions as compare functions,
// because they dereference the left and right arguments first!
void list_qsort(list_t *list, int compare(const void *left, const void *right));