Mercurial > sdl-ios-xcode
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); }