]> git.sur5r.net Git - cc65/commitdiff
Rewrote em_load_driver in assembler fixing a possible memory leak.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 22 Jul 2012 11:36:09 +0000 (11:36 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 22 Jul 2012 11:36:09 +0000 (11:36 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5793 b7a2c559-68d2-44c3-8de9-860c34a00d81

asminc/em-error.inc
asminc/em-kernel.inc
include/em.h
libsrc/em/Makefile
libsrc/em/em-kernel.s
libsrc/em/em_load.c [deleted file]

index 4cf89fe85b28901b03c6db2df647060c66019794..e0c885072a8e42b16391e09d8387cf06f9b12c06 100644 (file)
@@ -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       */
 
 
 
-; 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
 
 
 
index 4f581b7c70585bb582b41f92aad62221f96a6b8c..dedbb2bf4cd00cda3b8eb78288cda13ee4ac4d7d 100644 (file)
@@ -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
 
-
index f61a8a74fe3444c13e591aeffe30a1834c9eb91b..8b409cac2d1845f162f14d36937a1f6947a9a188 100644 (file)
@@ -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
index 2507c7abb38edcefcd7f8d729ef1e3ad3218562e..f702a337c7e5e9acb9739ca3046d01afd63a4c70 100644 (file)
@@ -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     \
index 7f15d258fa118f3de4e08c6d81353276a6a75f4a..881c517482205b00c86df47e791b7fb6fad082c2 100644 (file)
@@ -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 (file)
index 071eaa9..0000000
+++ /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 <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <modload.h>
-#include <em.h>
-#include <em/em-kernel.h>
-
-
-
-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;
-}
-
-
-