Fixed a problem when loading joystick drivers: When an install error occurred,

the driver wasn't removed from memory.


git-svn-id: svn://svn.cc65.org/cc65/trunk@3752 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz
2006-06-04 10:15:18 +00:00
parent dc569cad49
commit 878dcf4aa7
4 changed files with 44 additions and 16 deletions

View File

@@ -4,8 +4,6 @@
; Common functions of the joystick API.
;
.export joy_clear_ptr
.importzp ptr1
.interruptor joy_irq ; Export as IRQ handler
@@ -117,7 +115,7 @@ _joy_uninstall:
jsr joy_uninstall ; Call the driver routine
joy_clear_ptr: ; External entry point
_joy_clear_ptr: ; External entry point
lda #0
sta _joy_drv
sta _joy_drv+1 ; Clear the driver pointer

View File

@@ -6,10 +6,10 @@
/* */
/* */
/* */
/* (C) 2002-2003 Ullrich von Bassewitz */
/* R<>merstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
/* (C) 2002-2006, Ullrich von Bassewitz */
/* R<EFBFBD>merstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
/* */
/* */
/* This software is provided 'as-is', without any expressed or implied */
@@ -41,6 +41,11 @@
/* Use static local variables, since the module is not reentrant anyway */
#pragma staticlocals (on);
unsigned char __fastcall__ joy_load_driver (const char* name)
/* Load a joystick driver and return an error code */
{
@@ -68,8 +73,21 @@ unsigned char __fastcall__ joy_load_driver (const char* name)
if (Res == MLOAD_OK) {
/* Check the driver signature, install the driver */
return joy_install (ctrl.module);
Res = joy_install (ctrl.module);
/* If the driver did not install correctly, remove it from
* memory again.
*/
if (Res != JOY_ERR_OK) {
/* Do not call mouse_uninstall here, since the driver is not
* correctly installed.
*/
mod_free (joy_drv);
joy_clear_ptr ();
}
/* Return the error code */
return Res;
}
}