1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-07 23:29:39 +00:00

Fixed a problem in mouse_load_driver: The driver was not removed from memory

when the load failed.


git-svn-id: svn://svn.cc65.org/cc65/trunk@3748 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2006-06-04 09:48:14 +00:00
parent d93f31777c
commit c1a38ce8f4
4 changed files with 34 additions and 7 deletions

View File

@ -151,8 +151,10 @@ MOUSE_BTN_RIGHT = $01
.global _mouse_info
.global _mouse_ioctl
.global _mouse_clear_ptr
;------------------------------------------------------------------------------
; Driver entry points
; Driver entry points (asm callable)
.global mouse_install
.global mouse_uninstall

View File

@ -6,10 +6,10 @@
/* */
/* */
/* */
/* (C) 2003 Ullrich von Bassewitz */
/* Römerstraße 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
/* (C) 2003-2006, Ullrich von Bassewitz */
/* Römerstraße 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
/* */
/* */
/* This software is provided 'as-is', without any expressed or implied */
@ -49,6 +49,17 @@ extern void* mouse_drv; /* Pointer to driver */
/*****************************************************************************/
/* Code */
/*****************************************************************************/
void mouse_clear_ptr (void);
/* Clear the mouse_drv pointer */
/* End of mouse-kernel.h */
#endif

View File

@ -162,7 +162,7 @@ _mouse_uninstall:
jsr uninstall_irq ; Disable driver interrupts
jsr mouse_uninstall ; Call driver routine
mouse_clear_ptr: ; External entry point
_mouse_clear_ptr: ; External entry point
lda #0
sta _mouse_drv
sta _mouse_drv+1 ; Clear the driver pointer
@ -170,3 +170,4 @@ mouse_clear_ptr: ; External entry point
tax
rts ; Return zero

View File

@ -75,9 +75,22 @@ unsigned char __fastcall__ mouse_load_driver (const struct mouse_callbacks* c,
if (Res == MLOAD_OK) {
/* Check the driver signature, install the driver */
return mouse_install (c, ctrl.module);
Res = mouse_install (c, ctrl.module);
/* If the driver did not install correctly, remove it from
* memory again.
*/
if (Res != MLOAD_OK) {
/* Do not call mouse_uninstall here, since the driver is not
* correctly installed.
*/
mod_free (mouse_drv);
mouse_clear_ptr ();
}
}
/* Return the error code */
return Res;
}
/* Error loading the driver */