Skip to content

Commit

Permalink
wayland: Move buffer copy into mime_data_list_add()
Browse files Browse the repository at this point in the history
It makes it clearer who owns the memory, and more reasonable to free it on
failure in the creating function.

(and, of course, pacifies static analysis.)
  • Loading branch information
icculus committed May 28, 2020
1 parent 22da9d4 commit ce7ae4e
Showing 1 changed file with 13 additions and 14 deletions.
27 changes: 13 additions & 14 deletions src/video/wayland/SDL_waylanddatamanager.c
Expand Up @@ -185,8 +185,16 @@ mime_data_list_add(struct wl_list* list,
{
int status = 0;
size_t mime_type_length = 0;

SDL_MimeDataList *mime_data = NULL;
void *internal_buffer = NULL;

if (buffer != NULL) {
internal_buffer = SDL_malloc(length);
if (internal_buffer == NULL) {
return SDL_OutOfMemory();
}
SDL_memcpy(internal_buffer, buffer, length);
}

mime_data = mime_data_list_find(list, mime_type);

Expand All @@ -211,8 +219,10 @@ mime_data_list_add(struct wl_list* list,
if (mime_data->data != NULL) {
SDL_free(mime_data->data);
}
mime_data->data = buffer;
mime_data->data = internal_buffer;
mime_data->length = length;
} else {
SDL_free(internal_buffer);
}

return status;
Expand Down Expand Up @@ -264,18 +274,7 @@ int Wayland_data_source_add_data(SDL_WaylandDataSource *source,
const void *buffer,
size_t length)
{
int status = 0;
if (length > 0) {
void *internal_buffer = SDL_malloc(length);
if (internal_buffer == NULL) {
status = SDL_OutOfMemory();
} else {
SDL_memcpy(internal_buffer, buffer, length);
status = mime_data_list_add(&source->mimes, mime_type,
internal_buffer, length);
}
}
return status;
return mime_data_list_add(&source->mimes, mime_type, buffer, length);
}

SDL_bool
Expand Down

0 comments on commit ce7ae4e

Please sign in to comment.