diff options
author | Calvin Lee <cyrus296@gmail.com> | 2017-08-16 09:23:21 +0200 |
---|---|---|
committer | Calvin Lee <cyrus296@gmail.com> | 2017-08-16 09:23:21 +0200 |
commit | 901c14c409e6e8143ade06a7478241e558cfb79c (patch) | |
tree | 8e83344aeadb70c3449baa663d02d7013c542d62 /include | |
parent | 19d6442f52743d50d10c796d7146f58c251f67fe (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')
-rw-r--r-- | include/wlr/util/list.h | 37 |
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)); |