aboutsummaryrefslogtreecommitdiffstats
path: root/src/wayland-util.c
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@googlemail.com>2012-10-11 23:37:43 +0200
committerKristian Høgsberg <krh@bitplanet.net>2012-10-15 16:06:15 -0400
commit0d5850e6d67a09a670625dfb99ec9efefdafb75f (patch)
tree426b1efc6b6328b1b0ea45608a6a52d0ec163f1a /src/wayland-util.c
parentwayland-client: add wl_display_get_error() (diff)
downloadwayland-0d5850e6d67a09a670625dfb99ec9efefdafb75f.tar
wayland-0d5850e6d67a09a670625dfb99ec9efefdafb75f.tar.gz
wayland-0d5850e6d67a09a670625dfb99ec9efefdafb75f.tar.bz2
wayland-0d5850e6d67a09a670625dfb99ec9efefdafb75f.tar.lz
wayland-0d5850e6d67a09a670625dfb99ec9efefdafb75f.tar.xz
wayland-0d5850e6d67a09a670625dfb99ec9efefdafb75f.tar.zst
wayland-0d5850e6d67a09a670625dfb99ec9efefdafb75f.zip
wayland-util: return -1 if wl_array_copy() fails
We might have to perform memory allocations in wl_array_copy(), so catch out-of-memory errors in wl_array_add() and return -1 before changing any state. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Diffstat (limited to 'src/wayland-util.c')
-rw-r--r--src/wayland-util.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/wayland-util.c b/src/wayland-util.c
index eacf902..158f5a5 100644
--- a/src/wayland-util.c
+++ b/src/wayland-util.c
@@ -132,12 +132,18 @@ wl_array_add(struct wl_array *array, size_t size)
return p;
}
-WL_EXPORT void
+WL_EXPORT int
wl_array_copy(struct wl_array *array, struct wl_array *source)
{
- array->size = 0;
- wl_array_add(array, source->size);
+ if (array->size < source->size) {
+ if (!wl_array_add(array, source->size - array->size))
+ return -1;
+ } else {
+ array->size = source->size;
+ }
+
memcpy(array->data, source->data, source->size);
+ return 0;
}
union map_entry {