From d8392622bb804931f773f067a22dad87bf2df6cb Mon Sep 17 00:00:00 2001
From: Sam Lantinga <slouken@libsdl.org>
Date: Sun, 6 Mar 2011 21:49:52 -0800
Subject: [PATCH] Better error reporting in allocating a pixel format.

---
 src/video/SDL_pixels.c | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/src/video/SDL_pixels.c b/src/video/SDL_pixels.c
index 2d5b969b..b31ea499 100644
--- a/src/video/SDL_pixels.c
+++ b/src/video/SDL_pixels.c
@@ -85,7 +85,7 @@ SDL_PixelFormatEnumToMasks(Uint32 format, int *bpp, Uint32 * Rmask,
 
     /* This function doesn't work with FourCC pixel formats */
     if (SDL_ISPIXELFORMAT_FOURCC(format)) {
-        SDL_SetError("Unknown pixel format");
+        SDL_SetError("FOURCC pixel formats are not supported");
         return SDL_FALSE;
     }
  
@@ -418,11 +418,6 @@ SDL_AllocFormat(Uint32 pixel_format)
 {
     SDL_PixelFormat *format;
 
-    if (SDL_ISPIXELFORMAT_FOURCC(pixel_format)) {
-        SDL_SetError("FOURCC pixel formats are not supported");
-        return NULL;
-    }
-
     /* Look it up in our list of previously allocated formats */
     for (format = formats; format; format = format->next) {
         if (pixel_format == format->format) {
@@ -435,9 +430,12 @@ SDL_AllocFormat(Uint32 pixel_format)
     format = SDL_malloc(sizeof(*format));
     if (format == NULL) {
         SDL_OutOfMemory();
-        return (NULL);
+        return NULL;
+    }
+    if (SDL_InitFormat(format, pixel_format) < 0) {
+        SDL_free(format);
+        return NULL;
     }
-    SDL_InitFormat(format, pixel_format);
 
     if (!SDL_ISPIXELFORMAT_INDEXED(pixel_format)) {
         /* Cache the RGB formats */
@@ -456,7 +454,6 @@ SDL_InitFormat(SDL_PixelFormat * format, Uint32 pixel_format)
 
     if (!SDL_PixelFormatEnumToMasks(pixel_format, &bpp,
                                     &Rmask, &Gmask, &Bmask, &Amask)) {
-        SDL_SetError("Unknown pixel format");
         return -1;
     }
 
-- 
2.18.1