diff src/joystick/SDL_joystick.c @ 3608:a5a37f850d83

Merged r3787:3788 from branches/SDL-1.2: better failures for joystick opening.
author Ryan C. Gordon <icculus@icculus.org>
date Wed, 06 Jan 2010 06:40:16 +0000
parents 71bb88152e3f
children f7b03b6838cb
line wrap: on
line diff
--- a/src/joystick/SDL_joystick.c	Wed Jan 06 06:12:01 2010 +0000
+++ b/src/joystick/SDL_joystick.c	Wed Jan 06 06:40:16 2010 +0000
@@ -114,64 +114,63 @@
 
     /* Create and initialize the joystick */
     joystick = (SDL_Joystick *) SDL_malloc((sizeof *joystick));
-    if (joystick != NULL) {
-        SDL_memset(joystick, 0, (sizeof *joystick));
-        joystick->index = device_index;
-        if (SDL_SYS_JoystickOpen(joystick) < 0) {
-            SDL_free(joystick);
-            joystick = NULL;
-        } else {
-            if (joystick->naxes > 0) {
-                joystick->axes = (Sint16 *) SDL_malloc
-                    (joystick->naxes * sizeof(Sint16));
-            }
-            if (joystick->nhats > 0) {
-                joystick->hats = (Uint8 *) SDL_malloc
-                    (joystick->nhats * sizeof(Uint8));
-            }
-            if (joystick->nballs > 0) {
-                joystick->balls = (struct balldelta *) SDL_malloc
-                    (joystick->nballs * sizeof(*joystick->balls));
-            }
-            if (joystick->nbuttons > 0) {
-                joystick->buttons = (Uint8 *) SDL_malloc
-                    (joystick->nbuttons * sizeof(Uint8));
-            }
-            if (((joystick->naxes > 0) && !joystick->axes)
-                || ((joystick->nhats > 0) && !joystick->hats)
-                || ((joystick->nballs > 0) && !joystick->balls)
-                || ((joystick->nbuttons > 0) && !joystick->buttons)) {
-                SDL_OutOfMemory();
-                SDL_JoystickClose(joystick);
-                joystick = NULL;
-            }
-            if (joystick->axes) {
-                SDL_memset(joystick->axes, 0,
-                           joystick->naxes * sizeof(Sint16));
-            }
-            if (joystick->hats) {
-                SDL_memset(joystick->hats, 0,
-                           joystick->nhats * sizeof(Uint8));
-            }
-            if (joystick->balls) {
-                SDL_memset(joystick->balls, 0,
-                           joystick->nballs * sizeof(*joystick->balls));
-            }
-            if (joystick->buttons) {
-                SDL_memset(joystick->buttons, 0,
-                           joystick->nbuttons * sizeof(Uint8));
-            }
-        }
+    if (joystick == NULL) {
+        SDL_OutOfMemory();
+        return NULL;
+    }
+
+    SDL_memset(joystick, 0, (sizeof *joystick));
+    joystick->index = device_index;
+    if (SDL_SYS_JoystickOpen(joystick) < 0) {
+        SDL_free(joystick);
+        return NULL;
+    }
+    if (joystick->naxes > 0) {
+        joystick->axes = (Sint16 *) SDL_malloc
+            (joystick->naxes * sizeof(Sint16));
+    }
+    if (joystick->nhats > 0) {
+        joystick->hats = (Uint8 *) SDL_malloc
+            (joystick->nhats * sizeof(Uint8));
+    }
+    if (joystick->nballs > 0) {
+        joystick->balls = (struct balldelta *) SDL_malloc
+            (joystick->nballs * sizeof(*joystick->balls));
+    }
+    if (joystick->nbuttons > 0) {
+        joystick->buttons = (Uint8 *) SDL_malloc
+            (joystick->nbuttons * sizeof(Uint8));
     }
-    if (joystick) {
-        /* Add joystick to list */
-        ++joystick->ref_count;
-        SDL_Lock_EventThread();
-        for (i = 0; SDL_joysticks[i]; ++i)
-            /* Skip to next joystick */ ;
-        SDL_joysticks[i] = joystick;
-        SDL_Unlock_EventThread();
+    if (((joystick->naxes > 0) && !joystick->axes)
+        || ((joystick->nhats > 0) && !joystick->hats)
+        || ((joystick->nballs > 0) && !joystick->balls)
+        || ((joystick->nbuttons > 0) && !joystick->buttons)) {
+        SDL_OutOfMemory();
+        SDL_JoystickClose(joystick);
+        return NULL;
+    }
+    if (joystick->axes) {
+        SDL_memset(joystick->axes, 0, joystick->naxes * sizeof(Sint16));
+    }
+    if (joystick->hats) {
+        SDL_memset(joystick->hats, 0, joystick->nhats * sizeof(Uint8));
     }
+    if (joystick->balls) {
+        SDL_memset(joystick->balls, 0,
+            joystick->nballs * sizeof(*joystick->balls));
+    }
+    if (joystick->buttons) {
+        SDL_memset(joystick->buttons, 0, joystick->nbuttons * sizeof(Uint8));
+    }
+
+    /* Add joystick to list */
+    ++joystick->ref_count;
+    SDL_Lock_EventThread();
+    for (i = 0; SDL_joysticks[i]; ++i)
+        /* Skip to next joystick */ ;
+    SDL_joysticks[i] = joystick;
+    SDL_Unlock_EventThread();
+
     return (joystick);
 }