]> git.mdlowis.com Git - proto/labwc.git/commitdiff
common/array.h: add array_add() helper
authorConsolatis <35009135+Consolatis@users.noreply.github.com>
Fri, 2 Aug 2024 19:57:19 +0000 (21:57 +0200)
committerConsolatis <35009135+Consolatis@users.noreply.github.com>
Sat, 3 Aug 2024 16:25:23 +0000 (18:25 +0200)
include/common/array.h

index f6c51fc91481fac5803794878c405fef5df59bc5..a1ea7499005fbcafecfe1038bb6a3e24abd5ee97 100644 (file)
@@ -1,6 +1,8 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 #ifndef LABWC_ARRAY_H
 #define LABWC_ARRAY_H
+#include <stdio.h>
+#include <stdlib.h>
 #include <wayland-server-core.h>
 
 /*
@@ -41,4 +43,34 @@ wl_array_len(struct wl_array *array)
                pos && (const char *)pos >= (const char *)(array)->data;               \
                (pos)--)
 
+/**
+ * array_add() - add item to wl_array and exit on allocation error
+ * @_arr: wl_array to add the item to
+ * @_val: the item to add to the array
+ *
+ * Let us illustrate the function of this macro by an example:
+ *
+ *   uint32_t value = 5;
+ *   array_add(array, value);
+ *
+ * ...is the equivalent of the code below which is how you would
+ * otherwise use the wl_array API:
+ *
+ *   uint32_t *elm = wl_array_add(array, sizeof(uint32_t));
+ *   if (!elm) {
+ *       perror("failed to allocate memory");
+ *       exit(EXIT_FAILURE);
+ *   }
+ *   *elm = value;
+ */
+#define array_add(_arr, _val) do {                           \
+               __typeof__(_val) *_entry = wl_array_add(     \
+                       (_arr), sizeof(__typeof__(_val)));   \
+               if (!_entry) {                               \
+                       perror("Failed to allocate memory"); \
+                       exit(EXIT_FAILURE);                  \
+               }                                            \
+               *_entry = (_val);                            \
+       } while (0)
+
 #endif /* LABWC_ARRAY_H */