util: set errno in wl_map_insert_at()

And add errno checks in callers, where it seems to be necessary.

Signed-off-by: Aleksandr Mezin <mezin.alexander@gmail.com>
This commit is contained in:
Aleksandr Mezin 2022-02-09 05:36:11 +06:00 committed by Simon Ser
parent 03e8a1f84b
commit 884d5fe3ab
3 changed files with 18 additions and 9 deletions

View file

@ -485,7 +485,10 @@ wl_proxy_create_for_id(struct wl_proxy *factory,
proxy->refcount = 1;
proxy->version = factory->version;
wl_map_insert_at(&display->objects, 0, id, proxy);
if (wl_map_insert_at(&display->objects, 0, id, proxy) == -1) {
free(proxy);
return NULL;
}
return proxy;
}

View file

@ -1843,9 +1843,11 @@ wl_resource_create(struct wl_client *client,
resource->dispatcher = NULL;
if (wl_map_insert_at(&client->objects, 0, id, resource) < 0) {
wl_resource_post_error(client->display_resource,
WL_DISPLAY_ERROR_INVALID_OBJECT,
"invalid new id %d", id);
if (errno == EINVAL) {
wl_resource_post_error(client->display_resource,
WL_DISPLAY_ERROR_INVALID_OBJECT,
"invalid new id %d", id);
}
free(resource);
return NULL;
}
@ -2240,10 +2242,12 @@ wl_client_add_resource(struct wl_client *client,
WL_MAP_ENTRY_LEGACY, resource);
} else if (wl_map_insert_at(&client->objects, WL_MAP_ENTRY_LEGACY,
resource->object.id, resource) < 0) {
wl_resource_post_error(client->display_resource,
WL_DISPLAY_ERROR_INVALID_OBJECT,
"invalid new id %d",
resource->object.id);
if (errno == EINVAL) {
wl_resource_post_error(client->display_resource,
WL_DISPLAY_ERROR_INVALID_OBJECT,
"invalid new id %d",
resource->object.id);
}
return 0;
}

View file

@ -239,8 +239,10 @@ wl_map_insert_at(struct wl_map *map, uint32_t flags, uint32_t i, void *data)
}
count = entries->size / sizeof *start;
if (count < i)
if (count < i) {
errno = EINVAL;
return -1;
}
if (count == i) {
if (!wl_array_add(entries, sizeof *start))