Fix bug 545, by returning early whenever an error occurs when initializing joystick structure

--HG--
branch : SDL-1.2
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/branches/SDL-1.2%402925
This commit is contained in:
Patrice Mandin 2008-07-19 11:54:55 +00:00
parent 7bc2820de9
commit a4948e3c6c

View file

@ -112,13 +112,17 @@ SDL_Joystick *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 ) {
return(NULL);
}
SDL_memset(joystick, 0, (sizeof *joystick)); SDL_memset(joystick, 0, (sizeof *joystick));
joystick->index = device_index; joystick->index = device_index;
if ( SDL_SYS_JoystickOpen(joystick) < 0 ) { if ( SDL_SYS_JoystickOpen(joystick) < 0 ) {
SDL_free(joystick); SDL_free(joystick);
joystick = NULL; return(NULL);
} else { }
if ( joystick->naxes > 0 ) { if ( joystick->naxes > 0 ) {
joystick->axes = (Sint16 *)SDL_malloc joystick->axes = (Sint16 *)SDL_malloc
(joystick->naxes*sizeof(Sint16)); (joystick->naxes*sizeof(Sint16));
@ -141,8 +145,9 @@ SDL_Joystick *SDL_JoystickOpen(int device_index)
|| ((joystick->nbuttons > 0) && !joystick->buttons)) { || ((joystick->nbuttons > 0) && !joystick->buttons)) {
SDL_OutOfMemory(); SDL_OutOfMemory();
SDL_JoystickClose(joystick); SDL_JoystickClose(joystick);
joystick = NULL; return(NULL);
} }
if ( joystick->axes ) { if ( joystick->axes ) {
SDL_memset(joystick->axes, 0, SDL_memset(joystick->axes, 0,
joystick->naxes*sizeof(Sint16)); joystick->naxes*sizeof(Sint16));
@ -159,9 +164,7 @@ SDL_Joystick *SDL_JoystickOpen(int device_index)
SDL_memset(joystick->buttons, 0, SDL_memset(joystick->buttons, 0,
joystick->nbuttons*sizeof(Uint8)); joystick->nbuttons*sizeof(Uint8));
} }
}
}
if ( joystick ) {
/* Add joystick to list */ /* Add joystick to list */
++joystick->ref_count; ++joystick->ref_count;
SDL_Lock_EventThread(); SDL_Lock_EventThread();
@ -169,7 +172,7 @@ SDL_Joystick *SDL_JoystickOpen(int device_index)
/* Skip to next joystick */ ; /* Skip to next joystick */ ;
SDL_joysticks[i] = joystick; SDL_joysticks[i] = joystick;
SDL_Unlock_EventThread(); SDL_Unlock_EventThread();
}
return(joystick); return(joystick);
} }