From e7ed3b374f6b776efaa4c144eca477aa7cbfe626 Mon Sep 17 00:00:00 2001 From: uz Date: Sun, 22 Jul 2012 11:36:09 +0000 Subject: [PATCH] Rewrote em_load_driver in assembler fixing a possible memory leak. git-svn-id: svn://svn.cc65.org/cc65/trunk@5793 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- asminc/em-error.inc | 25 +++++++------ asminc/em-kernel.inc | 8 +++-- include/em.h | 3 +- libsrc/em/Makefile | 3 +- libsrc/em/em-kernel.s | 1 - libsrc/em/em_load.c | 82 ------------------------------------------- 6 files changed, 25 insertions(+), 97 deletions(-) delete mode 100644 libsrc/em/em_load.c diff --git a/asminc/em-error.inc b/asminc/em-error.inc index 4cf89fe85..e0c885072 100644 --- a/asminc/em-error.inc +++ b/asminc/em-error.inc @@ -6,10 +6,10 @@ ;/* */ ;/* */ ;/* */ -;/* (C) 2002 Ullrich von Bassewitz */ -;/* Wacholderweg 14 */ -;/* D-70597 Stuttgart */ -;/* EMail: uz@musoftware.de */ +;/* (C) 2002-2012, Ullrich von Bassewitz */ +;/* Roemerstrasse 52 */ +;/* D-70794 Filderstadt */ +;/* EMail: uz@cc65.org */ ;/* */ ;/* */ ;/* This software is provided 'as-is', without any expressed or implied */ @@ -33,12 +33,17 @@ -; Error codes -EM_ERR_OK = 0 ; No error -EM_ERR_NO_DRIVER = 1 ; No driver available -EM_ERR_CANNOT_LOAD = 2 ; Error loading driver -EM_ERR_INV_DRIVER = 3 ; Invalid driver -EM_ERR_NO_DEVICE = 4 ; Device (hardware) not found +; Error constants +.enum + EM_ERR_OK ; No error + EM_ERR_NO_DRIVER ; No driver available + EM_ERR_CANNOT_LOAD ; Error loading driver + EM_ERR_INV_DRIVER ; Invalid driver + EM_ERR_NO_DEVICE ; Device (hardware) not found + EM_ERR_INSTALLED ; A driver is already installed + + EM_ERR_COUNT ; Special: Number of error messages +.endenum diff --git a/asminc/em-kernel.inc b/asminc/em-kernel.inc index 4f581b7c7..dedbb2bf4 100644 --- a/asminc/em-kernel.inc +++ b/asminc/em-kernel.inc @@ -74,7 +74,7 @@ EMD_API_VERSION = $00 ;------------------------------------------------------------------------------ ; Driver entry points - + .global emd_install .global emd_uninstall .global emd_pagecount @@ -87,6 +87,11 @@ EMD_API_VERSION = $00 ;------------------------------------------------------------------------------ ; ASM functions + .global em_clear_ptr + +;------------------------------------------------------------------------------ +; C callable functions + .global _em_unload .global _em_install .global _em_uninstall @@ -97,4 +102,3 @@ EMD_API_VERSION = $00 .global _em_copyfrom .global _em_copyto - diff --git a/include/em.h b/include/em.h index f61a8a74f..8b409cac2 100644 --- a/include/em.h +++ b/include/em.h @@ -6,7 +6,7 @@ /* */ /* */ /* */ -/* (C) 2002-2011, Ullrich von Bassewitz */ +/* (C) 2002-2012, Ullrich von Bassewitz */ /* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ @@ -53,6 +53,7 @@ #define EM_ERR_CANNOT_LOAD 2 /* Error loading driver */ #define EM_ERR_INV_DRIVER 3 /* Invalid driver */ #define EM_ERR_NO_DEVICE 4 /* Device (hardware) not found */ +#define EM_ERR_INSTALLED 5 /* A driver is already installed */ /* Parameters for the em_copy_... functions. NOTE: The first seven bytes * have the same order and alignment as needed for the Commodore REU, so diff --git a/libsrc/em/Makefile b/libsrc/em/Makefile index 2507c7abb..f702a337c 100644 --- a/libsrc/em/Makefile +++ b/libsrc/em/Makefile @@ -29,12 +29,13 @@ CFLAGS = -Osir -g -T -t $(SYS) --forget-inc-paths -I . -I ../../include #-------------------------------------------------------------------------- # Object files -C_OBJS = em_load.o +C_OBJS = S_OBJS = em-kernel.o \ em_commit.o \ em_copyto.o \ em_copyfrom.o \ + em_load.o \ em_map.o \ em_pagecount.o \ em_unload.o \ diff --git a/libsrc/em/em-kernel.s b/libsrc/em/em-kernel.s index 7f15d258f..881c51748 100644 --- a/libsrc/em/em-kernel.s +++ b/libsrc/em/em-kernel.s @@ -4,7 +4,6 @@ ; Common functions of the extended memory API. ; - .export em_clear_ptr .import return0 .importzp ptr1 diff --git a/libsrc/em/em_load.c b/libsrc/em/em_load.c deleted file mode 100644 index 071eaa96e..000000000 --- a/libsrc/em/em_load.c +++ /dev/null @@ -1,82 +0,0 @@ -/*****************************************************************************/ -/* */ -/* em_load.c */ -/* */ -/* Loader module for EM drivers */ -/* */ -/* */ -/* */ -/* (C) 2002-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ -/* D-70794 Filderstadt */ -/* EMail: uz@cc65.org */ -/* */ -/* */ -/* This software is provided 'as-is', without any expressed or implied */ -/* warranty. In no event will the authors be held liable for any damages */ -/* arising from the use of this software. */ -/* */ -/* Permission is granted to anyone to use this software for any purpose, */ -/* including commercial applications, and to alter it and redistribute it */ -/* freely, subject to the following restrictions: */ -/* */ -/* 1. The origin of this software must not be misrepresented; you must not */ -/* claim that you wrote the original software. If you use this software */ -/* in a product, an acknowledgment in the product documentation would be */ -/* appreciated but is not required. */ -/* 2. Altered source versions must be plainly marked as such, and must not */ -/* be misrepresented as being the original software. */ -/* 3. This notice may not be removed or altered from any source */ -/* distribution. */ -/* */ -/*****************************************************************************/ - - - -#include -#include -#include -#include -#include -#include - - - -unsigned char __fastcall__ em_load_driver (const char* name) -/* Load an extended memory driver and return an error code */ -{ - static struct mod_ctrl ctrl = { - read /* Read from disk */ - }; - unsigned char Res; - - /* Check if we do already have a driver loaded. If so, remove it. */ - if (em_drv != 0) { - em_uninstall (); - } - - /* Now open the file */ - ctrl.callerdata = open (name, O_RDONLY); - if (ctrl.callerdata >= 0) { - - /* Load the module */ - Res = mod_load (&ctrl); - - /* Close the input file */ - close (ctrl.callerdata); - - /* Check the return code */ - if (Res == MLOAD_OK) { - - /* Check the driver signature, install the driver */ - return em_install (ctrl.module); - - } - } - - /* Error loading the driver */ - return EM_ERR_CANNOT_LOAD; -} - - - -- 2.39.5