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:
parent
d93f31777c
commit
c1a38ce8f4
4 changed files with 34 additions and 7 deletions
|
@ -151,8 +151,10 @@ MOUSE_BTN_RIGHT = $01
|
||||||
.global _mouse_info
|
.global _mouse_info
|
||||||
.global _mouse_ioctl
|
.global _mouse_ioctl
|
||||||
|
|
||||||
|
.global _mouse_clear_ptr
|
||||||
|
|
||||||
;------------------------------------------------------------------------------
|
;------------------------------------------------------------------------------
|
||||||
; Driver entry points
|
; Driver entry points (asm callable)
|
||||||
|
|
||||||
.global mouse_install
|
.global mouse_install
|
||||||
.global mouse_uninstall
|
.global mouse_uninstall
|
||||||
|
|
|
@ -6,10 +6,10 @@
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2003 Ullrich von Bassewitz */
|
/* (C) 2003-2006, Ullrich von Bassewitz */
|
||||||
/* Römerstraße 52 */
|
/* Römerstraße 52 */
|
||||||
/* D-70794 Filderstadt */
|
/* D-70794 Filderstadt */
|
||||||
/* EMail: uz@cc65.org */
|
/* EMail: uz@cc65.org */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* This software is provided 'as-is', without any expressed or implied */
|
/* 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 */
|
/* End of mouse-kernel.h */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -162,7 +162,7 @@ _mouse_uninstall:
|
||||||
jsr uninstall_irq ; Disable driver interrupts
|
jsr uninstall_irq ; Disable driver interrupts
|
||||||
jsr mouse_uninstall ; Call driver routine
|
jsr mouse_uninstall ; Call driver routine
|
||||||
|
|
||||||
mouse_clear_ptr: ; External entry point
|
_mouse_clear_ptr: ; External entry point
|
||||||
lda #0
|
lda #0
|
||||||
sta _mouse_drv
|
sta _mouse_drv
|
||||||
sta _mouse_drv+1 ; Clear the driver pointer
|
sta _mouse_drv+1 ; Clear the driver pointer
|
||||||
|
@ -170,3 +170,4 @@ mouse_clear_ptr: ; External entry point
|
||||||
tax
|
tax
|
||||||
rts ; Return zero
|
rts ; Return zero
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -75,9 +75,22 @@ unsigned char __fastcall__ mouse_load_driver (const struct mouse_callbacks* c,
|
||||||
if (Res == MLOAD_OK) {
|
if (Res == MLOAD_OK) {
|
||||||
|
|
||||||
/* Check the driver signature, install the driver */
|
/* 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 */
|
/* Error loading the driver */
|
||||||
|
|
Loading…
Add table
Reference in a new issue