Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

Merged r3787:3788 from branches/SDL-1.2: better failures for joystick…

… opening.
  • Loading branch information
icculus committed Jan 6, 2010
1 parent 46c939a commit 12d2ed57f764c5860f3dae2812c7c115315eccd7
Showing with 55 additions and 56 deletions.
  1. +55 −56 src/joystick/SDL_joystick.c
@@ -114,64 +114,63 @@ SDL_JoystickOpen(int device_index)

/* 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) {
/* 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->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);
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);
}

0 comments on commit 12d2ed5

Please sign in to comment.