error: SDL's allocators now call SDL_OutOfMemory on error.

This means the allocator's caller doesn't need to use SDL_OutOfMemory directly
if the allocation fails.

This applies to the usual allocators: SDL_malloc, SDL_calloc, SDL_realloc
(all of these regardless of if the app supplied a custom allocator or we're
using system malloc() or an internal copy of dlmalloc under the hood),
SDL_aligned_alloc, SDL_small_alloc, SDL_strdup, SDL_asprintf, SDL_wcsdup...
probably others. If it returns something you can pass to SDL_free, it should
work.

The caller might still need to use SDL_OutOfMemory if something that wasn't
SDL allocated the memory: operator new in C++ code, Objective-C's alloc
message, win32 GlobalAlloc, etc.

Fixes #8642.
This commit is contained in:
Ryan C. Gordon
2023-11-30 00:14:27 -05:00
parent 70b65d4170
commit 447b508a77
197 changed files with 313 additions and 742 deletions

View File

@@ -461,7 +461,6 @@ static SDL_bool GetTextureForMemoryFrame(AVFrame *frame, SDL_Texture **texture)
if (!sws_container) {
sws_container = (struct SwsContextContainer *)SDL_calloc(1, sizeof(*sws_container));
if (!sws_container) {
SDL_OutOfMemory();
return SDL_FALSE;
}
SDL_SetPropertyWithCleanup(props, SWS_CONTEXT_CONTAINER_PROPERTY, sws_container, FreeSwsContextContainer, NULL);
@@ -587,8 +586,6 @@ static SDL_bool GetTextureForVAAPIFrame(AVFrame *frame, SDL_Texture **texture)
SDL_SetError("Couldn't map hardware frame");
}
av_frame_free(&drm_frame);
} else {
SDL_OutOfMemory();
}
return result;
}

View File

@@ -144,7 +144,7 @@ static int SDL3_SetWindowShape(SDL_Window *window, SDL_Surface *shape, SDL_Windo
g_bitmap_h = shape->h;
g_bitmap = (Uint8*) SDL_malloc(shape->w * shape->h);
if (!g_bitmap) {
return SDL_OutOfMemory();
return -1;
}
SDL_CalculateShapeBitmap(*shape_mode, shape, g_bitmap, 1);

View File

@@ -36,7 +36,6 @@ GetNearbyFilename(const char *file)
if (!path) {
SDL_free(base);
SDL_OutOfMemory();
return NULL;
}
@@ -53,11 +52,7 @@ GetNearbyFilename(const char *file)
SDL_free(path);
}
path = SDL_strdup(file);
if (!path) {
SDL_OutOfMemory();
}
return path;
return SDL_strdup(file);
}
/**
@@ -73,16 +68,9 @@ char *
GetResourceFilename(const char *user_specified, const char *def)
{
if (user_specified) {
char *ret = SDL_strdup(user_specified);
if (!ret) {
SDL_OutOfMemory();
}
return ret;
} else {
return GetNearbyFilename(def);
return SDL_strdup(user_specified);
}
return GetNearbyFilename(def);
}
/**

View File

@@ -294,7 +294,6 @@ static void findPhysicalDevice(void)
}
physicalDevices = (VkPhysicalDevice *)SDL_malloc(sizeof(VkPhysicalDevice) * physicalDeviceCount);
if (!physicalDevices) {
SDL_OutOfMemory();
quit(2);
}
result = vkEnumeratePhysicalDevices(vulkanContext->instance, &physicalDeviceCount, physicalDevices);
@@ -330,7 +329,6 @@ static void findPhysicalDevice(void)
if (!queueFamiliesProperties) {
SDL_free(physicalDevices);
SDL_free(deviceExtensions);
SDL_OutOfMemory();
quit(2);
}
}
@@ -392,7 +390,6 @@ static void findPhysicalDevice(void)
if (!deviceExtensions) {
SDL_free(physicalDevices);
SDL_free(queueFamiliesProperties);
SDL_OutOfMemory();
quit(2);
}
}
@@ -550,7 +547,6 @@ static void getSurfaceFormats(void)
vulkanContext->surfaceFormats = (VkSurfaceFormatKHR *)SDL_malloc(sizeof(VkSurfaceFormatKHR) * vulkanContext->surfaceFormatsAllocatedCount);
if (!vulkanContext->surfaceFormats) {
vulkanContext->surfaceFormatsCount = 0;
SDL_OutOfMemory();
quit(2);
}
}
@@ -583,7 +579,6 @@ static void getSwapchainImages(void)
}
vulkanContext->swapchainImages = SDL_malloc(sizeof(VkImage) * vulkanContext->swapchainImageCount);
if (!vulkanContext->swapchainImages) {
SDL_OutOfMemory();
quit(2);
}
result = vkGetSwapchainImagesKHR(vulkanContext->device,
@@ -763,7 +758,6 @@ static void createFences(void)
vulkanContext->fences = SDL_malloc(sizeof(VkFence) * vulkanContext->swapchainImageCount);
if (!vulkanContext->fences) {
SDL_OutOfMemory();
quit(2);
}
for (i = 0; i < vulkanContext->swapchainImageCount; i++) {