Merged r3787:3788 from branches/SDL-1.2: better failures for joystick opening.
--HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%404358
This commit is contained in:
parent
9a2b0cfb61
commit
516aaa5d6c
1 changed files with 55 additions and 56 deletions
|
@ -114,64 +114,63 @@ SDL_JoystickOpen(int device_index)
|
||||||
|
|
||||||
/* Create and initialize the joystick */
|
/* Create and initialize the joystick */
|
||||||
joystick = (SDL_Joystick *) SDL_malloc((sizeof *joystick));
|
joystick = (SDL_Joystick *) SDL_malloc((sizeof *joystick));
|
||||||
if (joystick != NULL) {
|
if (joystick == NULL) {
|
||||||
SDL_memset(joystick, 0, (sizeof *joystick));
|
SDL_OutOfMemory();
|
||||||
joystick->index = device_index;
|
return NULL;
|
||||||
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) {
|
|
||||||
/* Add joystick to list */
|
SDL_memset(joystick, 0, (sizeof *joystick));
|
||||||
++joystick->ref_count;
|
joystick->index = device_index;
|
||||||
SDL_Lock_EventThread();
|
if (SDL_SYS_JoystickOpen(joystick) < 0) {
|
||||||
for (i = 0; SDL_joysticks[i]; ++i)
|
SDL_free(joystick);
|
||||||
/* Skip to next joystick */ ;
|
return NULL;
|
||||||
SDL_joysticks[i] = joystick;
|
|
||||||
SDL_Unlock_EventThread();
|
|
||||||
}
|
}
|
||||||
|
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);
|
||||||
|
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);
|
return (joystick);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue