Commit 516aaa5d authored by Ryan C. Gordon's avatar Ryan C. Gordon

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
parent 9a2b0cfb
...@@ -114,64 +114,63 @@ SDL_JoystickOpen(int device_index) ...@@ -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; SDL_memset(joystick, 0, (sizeof *joystick));
} else { joystick->index = device_index;
if (joystick->naxes > 0) { if (SDL_SYS_JoystickOpen(joystick) < 0) {
joystick->axes = (Sint16 *) SDL_malloc SDL_free(joystick);
(joystick->naxes * sizeof(Sint16)); return NULL;
} }
if (joystick->nhats > 0) { if (joystick->naxes > 0) {
joystick->hats = (Uint8 *) SDL_malloc joystick->axes = (Sint16 *) SDL_malloc
(joystick->nhats * sizeof(Uint8)); (joystick->naxes * sizeof(Sint16));
} }
if (joystick->nballs > 0) { if (joystick->nhats > 0) {
joystick->balls = (struct balldelta *) SDL_malloc joystick->hats = (Uint8 *) SDL_malloc
(joystick->nballs * sizeof(*joystick->balls)); (joystick->nhats * sizeof(Uint8));
}
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) { if (joystick->nballs > 0) {
/* Add joystick to list */ joystick->balls = (struct balldelta *) SDL_malloc
++joystick->ref_count; (joystick->nballs * sizeof(*joystick->balls));
SDL_Lock_EventThread();
for (i = 0; SDL_joysticks[i]; ++i)
/* Skip to next joystick */ ;
SDL_joysticks[i] = joystick;
SDL_Unlock_EventThread();
} }
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);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment