mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-11-03 09:01:42 -05:00
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>
This commit is contained in:
parent
66e4aa98cf
commit
0d5850e6d6
2 changed files with 10 additions and 4 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -165,7 +165,7 @@ struct wl_array {
|
|||
void wl_array_init(struct wl_array *array);
|
||||
void wl_array_release(struct wl_array *array);
|
||||
void *wl_array_add(struct wl_array *array, size_t size);
|
||||
void wl_array_copy(struct wl_array *array, struct wl_array *source);
|
||||
int wl_array_copy(struct wl_array *array, struct wl_array *source);
|
||||
|
||||
typedef int32_t wl_fixed_t;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue